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]"
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]"
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:
Chame a função
write_pandas()
.Chame o método
pandas.DataFrame.to_sql()
(consulte a documentação pandas) e especifiquepd_writer()
como o método a ser usado para inserir os dados no banco de dados.
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 |
|
Tipo FIXED NUMERIC (escala > 0) exceto DECIMAL |
|
FIXED NUMERIC tipo DECIMAL |
|
FLOAT/DOUBLE |
|
VARCHAR |
|
BINARY |
|
VARIANT |
|
DATE |
|
TIME |
|
TIMESTAMP_NTZ, TIMESTAMP_LTZ, TIMESTAMP_TZ |
|
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
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)
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)
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.