Uso de pandas DataFrames com o conector Python

pandas é uma biblioteca para análise de dados. Com o pandas, você usa uma estrutura de dados chamada DataFrame para analisar e manipular dados bidimensionais (como os dados de uma tabela de banco de dados).

Se você precisar obter dados de um banco de dados Snowflake para um pandas DataFrame, pode usar os métodos de API fornecidos com o Conector Snowflake para Python. O conector também fornece métodos de API para gravar dados de um pandas DataFrame para um banco de dados Snowflake.

Nota

Alguns destes métodos de API requerem uma versão específica da biblioteca PyArrow. Consulte Requisitos para detalhes.

Neste tópico:

Requisitos

Atualmente, os métodos de API orientados por pandas na API do conector Python funcionam com:

  • Conector Snowflake 2.1.2 (ou superior) para Python.

  • Biblioteca PyArrow versão 3.0.x.

    Se você não tiver PyArrow instalada, não precisa fazer isso; a instalação do Conector Python como documentado abaixo instala automaticamente a versão apropriada de PyArrow.

    Cuidado

    Se você já possui alguma versão da biblioteca PyArrow diferente da versão recomendada acima, por favor desinstale PyArrow antes de instalar o Conector Snowflake para Python. Não reinstale uma versão diferente de PyArrow após a instalação do Conector Snowflake para Python.

  • pandas 0.25.2 (ou superior). As versões anteriores podem funcionar, mas não foram testadas.

Instalação

Para instalar a versão compatível com pandas do Conector Snowflake para Python, execute o comando:

pip install "snowflake-connector-python[pandas]"
Copy

Você deve inserir os colchetes ([ e ]) como mostrado no comando. Os colchetes especificam a parte extra do pacote que deve ser instalada.

Use aspas ao redor do nome do pacote (como mostrado) para evitar que os colchetes sejam interpretados como um curinga.

Se você precisar instalar outros extras (por exemplo, secure-local-storage para armazenar em cache conexões SSO baseadas em navegador ou armazenar em cache tokens MFA), use uma vírgula entre os extras:

pip install "snowflake-connector-python[secure-local-storage,pandas]"
Copy

Leitura de dados de um banco de dados Snowflake para um Pandas DataFrame

Para ler dados em um pandas DataFrame, você usa um Cursor para recuperar os dados e então chama um destes métodos Cursor para colocar os dados em um pandas DataFrame:

Gravação de dados de um pandas DataFrame em um banco de dados Snowflake

Para gravar dados de um pandas DataFrame em um banco de dados Snowflake, siga uma destas instruções:

Mapeamento de dados do Snowflake para pandas

A tabela abaixo mostra o mapeamento dos tipos de dados do Snowflake para os tipos de dados do pandas:

Tipo de dados do Snowflake

Tipo de dados do pandas

Tipo FIXED NUMERIC (escala = 0) exceto DECIMAL

(u)int{8,16,32,64} ou float64 (para NULL)

Tipo FIXED NUMERIC (escala > 0) exceto DECIMAL

float64

FIXED NUMERIC tipo DECIMAL

decimal

FLOAT/DOUBLE

float64

VARCHAR

str

BINARY

str

VARIANT

str

DATE

object (com objetos datetime.date)

TIME

pandas.Timestamp(np.datetime64[ns])

TIMESTAMP_NTZ, TIMESTAMP_LTZ, TIMESTAMP_TZ

pandas.Timestamp(np.datetime64[ns])

Notas:

  • Se o tipo de dados do Snowflake for FIXED NUMERIC e a escala for zero, e se o valor for NULL, então o valor é convertido para float64, não um tipo de inteiro.

  • Se qualquer conversão causar um estouro, o conector Python gera uma exceção.

Importação do Pandas

Normalmente, o pandas é importado com a seguinte instrução:

import pandas as pd
Copy

Você pode ver referências a objetos pandas como pandas.object ou pd.object.

Migração para Pandas DataFrames

Esta seção é principalmente para usuários que já usaram pandas (e possivelmente SQLAlchemy).

Usuários anteriores do Pandas podem ter código semelhante a qualquer um dos seguintes:

  • Este exemplo mostra a maneira original de gerar um pandas DataFrame a partir do conector Python:

    import pandas as pd
    
    def fetch_pandas_old(cur, sql):
        cur.execute(sql)
        rows = 0
        while True:
            dat = cur.fetchmany(50000)
            if not dat:
                break
            df = pd.DataFrame(dat, columns=cur.description)
            rows += df.shape[0]
        print(rows)
    
    Copy
  • Este exemplo mostra como usar o SQLAlchemy para gerar um pandas DataFrame:

    import pandas as pd
    
    def fetch_pandas_sqlalchemy(sql):
        rows = 0
        for chunk in pd.read_sql_query(sql, engine, chunksize=50000):
            rows += chunk.shape[0]
        print(rows)
    
    Copy

Um código semelhante a qualquer um dos exemplos anteriores pode ser convertido para usar as chamadas de API pandas do conector Phyton listadas em Leitura de dados de um banco de dados Snowflake para um pandas DataFrame (neste tópico).

Nota

Com suporte para pandas no conector Python, o SQLAlchemy não é mais necessário para converter dados de um cursor em um DataFrame.

Entretanto, você pode continuar a usar o SQLAlchemy se desejar; o conector Python mantém a compatibilidade com SQLAlchemy.