web-dev-qa-db-fra.com

Python: enregistrer pandas dataframe dans un fichier parquet

Est-il possible d'enregistrer une trame de données pandas directement dans un fichier parquet? Sinon, quel serait le processus suggéré?

Le but est de pouvoir envoyer le fichier parquet à une autre équipe, qu'ils pourront utiliser scala pour le lire/l'ouvrir. Merci!

13
Edamame

Pandas a une fonction centrale to_parquet(). Écrivez simplement la trame de données au format parquet comme ceci:

df.to_parquet('myfile.parquet')

Vous devez toujours installer une bibliothèque de parquet telle que fastparquet. Si plusieurs bibliothèques parquet sont installées, vous devez également spécifier le moteur que vous souhaitez pandas utiliser, sinon il faudra le premier à installer (comme dans le documentation ). Par exemple:

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

Il existe une implémentation relativement précoce d'un package appelé fastparquet - ce pourrait être un bon cas d'utilisation pour ce dont vous avez besoin.

https://github.com/dask/fastparquet

conda install -c conda-forge fastparquet

ou

pip install fastparquet

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

ou, si vous souhaitez utiliser certaines options de fichier, comme le regroupement/compression des lignes:

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

pyarrow prend en charge le stockage de pandas dataframes:

import pyarrow

pyarrow.Table.from_pandas(dataset)
2
user113531

Oui c'est possible. Voici un exemple de code:

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

c'est l'approche qui a fonctionné pour moi - similaire à ce qui précède - mais a également choisi de stipuler le type de compression:

import pandas as pd 

configurer la trame de données de test

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

importer la bibliothèque de parquet requise (assurez-vous qu'elle a été installée, j'ai utilisé: $ conda install fastparquet)

import fastparquet

convertir le cadre de données en parquet et l'enregistrer dans le répertoire actuel

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

lire le fichier parquet dans le répertoire courant, dans un cadre de données pandas

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

production:

    col1    col2
0    1       3
1    2       4
1
Grant Shannon