PythonコネクタでのPandas DataFrames の使用¶
Pandas は、データ分析用のライブラリです。Pandasでは、 DataFrame と呼ばれるデータ構造を使用して、2次元データ(データベーステーブルからのデータなど)を分析および操作します。
SnowflakeデータベースからPandas DataFrame にデータを取得する必要がある場合は、Python用Snowflakeコネクタで提供される API メソッドを使用できます。コネクタは、Pandas DataFrame からSnowflakeデータベースにデータを書き込むための API メソッドも提供します。
注釈
これらの API メソッドの一部には、特定のバージョンの PyArrowライブラリ が必要です。詳細については、 要件 をご参照ください。
このトピックの内容:
要件¶
現在、Pythonコネクタ API のPandas指向の API メソッドは以下で動作します。
Python用Snowflakeコネクタ2.1.2(またはそれ以上)。
PyArrowライブラリ バージョン3.0.x。
PyArrow がインストールされていない場合は、自分で PyArrow をインストールする必要はありません。以下に記載されているPythonコネクタをインストールすると、適切なバージョンの PyArrow が自動的にインストールされます。
注意
上記の推奨バージョン以外のバージョンの PyArrow ライブラリを既にお持ちの場合は、Python用Snowflakeコネクタをインストールする前に PyArrow をアンインストールしてください。Python用Snowflakeコネクタのインストール後に、異なるバージョンの PyArrow を再インストールしないでください。
Pandas 0.25.2(またはそれ以上)。以前のバージョンは動作する可能性がありますが、テストされていません。
インストール¶
Pandas互換バージョンのPython用Snowflakeコネクタをインストールするには、次のコマンドを実行します。
pip install "snowflake-connector-python[pandas]"
コマンドに表示されているように、角括弧([
および ]
)を入力する必要があります。角括弧は、インストールする必要がある パッケージの追加部分 を指定します。
角括弧がワイルドカードとして解釈されないようにするには、パッケージ名を引用符で囲みます(図参照)。
他の追加機能(たとえば、 ブラウザーベースの 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ドキュメント を参照)、データベースにデータを挿入するために使用するメソッドとして: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 との互換性を維持しています。