web-dev-qa-db-ja.com

Python:pandasデータフレームをパーケットファイルに保存

pandasデータフレームを直接寄木細工のファイルに保存することは可能ですか?できない場合、推奨されるプロセスは何ですか?

目的は、寄木細工のファイルを別のチームに送信できるようにすることです。別のチームは、scalaコードを使用して、ファイルを読み取り/開くことができます。ありがとうございます。

13
Edamame

パンダにはコア関数to_parquet()があります。次のように、データフレームを寄木細工の形式に書き込むだけです。

df.to_parquet('myfile.parquet')

fastparquetなどの寄木細工のライブラリをインストールする必要があります。複数の寄木細工のライブラリがインストールされている場合は、使用するエンジンも指定する必要がありますpandas使用しない場合は、最初にインストールするエンジンが使用されます ドキュメント )例:

df.to_parquet('myfile.parquet', engine='fastparquet')
10
ben26941

Fastparquetと呼ばれるパッケージの比較的初期の実装があります-それはあなたが必要とするものの良いユースケースかもしれません。

https://github.com/dask/fastparquet

conda install -c conda-forge fastparquet

または

pip install fastparquet

from fastparquet import write 
write('outfile.parq', df)

または、行のグループ化/圧縮などのファイルオプションを使用する場合:

write('outfile2.parq', df, row_group_offsets=[0, 10000, 20000], compression='GZIP', file_scheme='Hive')
7
Mark S

pyarrow は、保存をサポートしていますpandasデータフレーム:

import pyarrow

pyarrow.Table.from_pandas(dataset)
2
user113531

はい、可能です。次にコード例を示します。

import pyarrow as pa
import pyarrow.parquet as pq

df = pd.DataFrame(data={'col1': [1, 2], 'col2': [3, 4]})
table = pa.Table.from_pandas(df, preserve_index=True)
pq.write_table(table, 'output.parquet')
1
Lionel

これは私にとってうまくいったアプローチです-上記と同様-圧縮タイプを規定することを選択しました:

import pandas as pd 

テストデータフレームを設定する

df = pd.DataFrame(data={'col1': [1, 2], 'col2': [3, 4]})

必要な寄木細工のライブラリをインポートします(これがインストールされていることを確認してください。使用したものは$ conda install fastparquet

import fastparquet

データフレームを寄木細工に変換し、現在のディレクトリに保存する

df.to_parquet('df.parquet.gzip', compression='gzip')

現在のディレクトリにある寄木細工のファイルを読み取り、pandasデータフレームに戻します。

pd.read_parquet('df.parquet.gzip')

出力:

    col1    col2
0    1       3
1    2       4
1
Grant Shannon