PythonコネクタでのPandas DataFrames の使用¶
Pandasは、データ分析用のライブラリです。Pandasでは、 DataFrame と呼ばれるデータ構造を使用して、2次元データ(データベーステーブルからのデータなど)を分析および操作します。
詳細については、 Pandas のドキュメントをご参照ください。
SnowflakeデータベースからPandas DataFrame にデータを取得する必要がある場合は、Python用Snowflakeコネクタで提供される API メソッドを使用できます。コネクタは、Pandas DataFrame からSnowflakeデータベースにデータを書き込むための API メソッドも提供します。
注釈
これらの API メソッドの一部には、特定のバージョンの PyArrow ライブラリが必要です。詳細については、 要件 をご参照ください。
詳細については、 PyArrow ライブラリ のドキュメントをご参照ください。
このトピックの内容:
要件¶
現在、Pythonコネクタ API のPandas指向の API メソッドは以下で動作します。
Python用Snowflake Connector 2.1.2(またはそれ以降)
PyArrow ライブラリのバージョン 3.0.x(またはそれ以降)(コネクタのバージョンに依存)。
PyArrow がインストールされていない場合は、自分で PyArrow をインストールする必要はありません。以下に記載されているPythonコネクタをインストールすると、適切なバージョンの PyArrow が自動的にインストールされます。
注意
上記の推奨バージョン以外のバージョンの PyArrow ライブラリを既にお持ちの場合は、Python用Snowflakeコネクタをインストールする前に PyArrow をアンインストールしてください。Python用Snowflakeコネクタのインストール後に、異なるバージョンの PyArrow を再インストールしないでください。
詳細については、 PyArrow ライブラリ のドキュメントをご参照ください。
コネクタのバージョンに応じて、pandas 0.25.2(またはそれ以降)。以前のバージョンは動作する可能性がありますが、テストされていません。
インストール¶
Pandas互換バージョンのPython用Snowflakeコネクタをインストールするには、次のコマンドを実行します。
pip install "snowflake-connector-python[pandas]"
コマンドに表示されているように、角括弧([ および ])を入力する必要があります。角括弧は、インストールするパッケージの追加部分を指定します。
詳細については、 追加機能 のPythonの依存関係をご参照ください。
角括弧がワイルドカードとして解釈されないようにするには、パッケージ名を引用符で囲みます(図参照)。
他の追加機能(たとえば、 ブラウザーベースの SSO を使用したキャッシュ接続 または MFA トークンのキャッシュ のための secure-local-storage)をインストールする必要がある場合は、追加機能の間にコンマを使用します。
pip install "snowflake-connector-python[secure-local-storage,pandas]"
SnowflakeデータベースからPandas DataFrame へのデータの読み取り¶
Pandas DataFrame にデータを読み取るには、 カーソル を使用して データを取得 し、次にこれらの Cursor メソッドの1つを呼び出してデータをPandas DataFrame に入力します。
Pandas DataFrame からSnowflakeデータベースへのデータの書き込み¶
Pandas DataFrame からSnowflakeデータベースにデータを書き込むには、次の内の 1つ を実行します。
write_pandas()関数を呼び出す。pandas.DataFrame.to_sql()メソッドを呼び出します。詳細については、 pandas.DataFrame.to_sql のドキュメントを参照し、データベースにデータを挿入するために使用するメソッドとして:py:func:
pd_writerを指定してください。
SnowflakeからPandasへのデータマッピング¶
次のテーブルは、Snowflakeデータ型からPandasデータ型へのマッピングを示しています。
Snowflakeデータ型 |
Pandasデータ型 |
|---|---|
DECIMALを除くFIXED NUMERIC型(スケール = 0) |
|
DECIMALを除くFIXED NUMERIC型(スケール > 0) |
|
FIXED NUMERIC型DECIMAL |
|
FLOAT/DOUBLE |
|
VARCHAR |
|
BINARY |
|
VARIANT |
|
DATE |
|
TIME |
|
TIMESTAMP_NTZ, TIMESTAMP_LTZ, TIMESTAMP_TZ |
|
注意:
Snowflakeデータ型が FIXED NUMERIC でスケールが0、値が NULL の場合、値は整数型ではなく
float64に変換されます。変換によってオーバーフローが発生した場合、Pythonコネクタは例外をスローします。
Pandasのインポート¶
通常、Pandasは次のステートメントでインポートされます。
import pandas as pd
Pandasオブジェクトへの参照が pandas.object または pd.object として表示される場合があります。
Pandas DataFrames への移行¶
このセクションは主に、Panda(および場合によっては SQLAlchemy)を使用したことがあるユーザーを対象としています。
以前のPandasユーザーは、次のいずれかに似たコードを持っている可能性があります。
この例は、PythonコネクタからPandas DataFrame を生成する元の方法を示しています。
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)
この例は、 SQLAlchemy を使用して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)
前述の例のいずれかに類似したコードは、 SnowflakeデータベースからPandas へのデータの読み取り DataFrame (このトピック内)に一覧表示されているPythonコネクタPandas API 呼び出しを使用するように変換できます。
注釈
PythonコネクタでのPandaのサポートにより、カーソル内のデータを DataFrame に変換するために SQLAlchemy は不要になりました。
ただし、必要に応じて SQLAlchemy を引き続き使用できます。Pythonコネクタは SQLAlchemy との互換性を維持しています。