Python:将熊猫数据框保存到镶木地板文件
Posted
技术标签:
【中文标题】Python:将熊猫数据框保存到镶木地板文件【英文标题】:Python: save pandas data frame to parquet file 【发布时间】:2017-04-25 07:06:16 【问题描述】:是否可以将 pandas 数据框直接保存到 parquet 文件中? 如果不是,建议的流程是什么?
目的是能够将镶木地板文件发送给另一个团队,他们可以使用 scala 代码读取/打开它。谢谢!
【问题讨论】:
其他团队是否在使用 Spark 或其他一些 Scala 工具?加载 CSV 是 Spark 非常简单 如果你有pyspark
,你可以做类似this的事情
【参考方案1】:
这是对我有用的方法 - 类似于上面 - 但也选择规定压缩类型:
设置测试数据框
df = pd.DataFrame(data='col1': [1, 2], 'col2': [3, 4])
将数据框转换为拼花并保存到当前目录
df.to_parquet('df.parquet.gzip', compression='gzip')
读取当前目录下的 parquet 文件,返回 pandas 数据框
pd.read_parquet('df.parquet.gzip')
输出:
col1 col2
0 1 3
1 2 4
【讨论】:
当我们不使用它的任何东西时,为什么我们需要导入?【参考方案2】:是的,pandas 支持以 parquet 格式保存数据帧。
将 pandas 数据帧写入 parquet 的简单方法。
假设,df
是熊猫数据框。我们需要导入以下库。
import pyarrow as pa
import pyarrow.parquet as pq
首先,将数据帧df
写入pyarrow
表中。
# Convert DataFrame to Apache Arrow Table
table = pa.Table.from_pandas(df_image_0)
其次,将table
写入parquet
文件说file_name.parquet
# Parquet with Brotli compression
pq.write_table(table, 'file_name.parquet')
注意:parquet 文件可以在写入时进一步压缩。以下是流行的压缩格式。
Snappy(默认,不需要参数) 压缩包 布罗特里采用 Snappy 压缩的 Parquet
pq.write_table(table, 'file_name.parquet')
采用 GZIP 压缩的 Parquet
pq.write_table(table, 'file_name.parquet', compression='GZIP')
使用 Brotli 压缩的 Parquet
pq.write_table(table, 'file_name.parquet', compression='BROTLI')
用不同格式的镶木地板进行比较
参考: https://tech.blueyonder.com/efficient-dataframe-storage-with-apache-parquet/
【讨论】:
【参考方案3】:是的,这是可能的。这是示例代码:
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')
【讨论】:
【参考方案4】:Pandas 有一个核心功能to_parquet()
。只需将数据框写入 parquet 格式,如下所示:
df.to_parquet('myfile.parquet')
您仍然需要安装 parquet 库,例如 fastparquet
。如果您安装了多个 parquet 库,您还需要指定您希望 pandas 使用哪个引擎,否则将需要安装第一个引擎(如documentation)。例如:
df.to_parquet('myfile.parquet', engine='fastparquet')
【讨论】:
在 Databricks 7.1 (python 3.7.5) 中运行它,我得到 'DataFrame' object has no attribute 'toParquet' 嗯,这似乎很简单:没有 toParquet,没有。这是 to_parquet。干杯! pandas.pydata.org/pandas-docs/stable/reference/api/…【参考方案5】:pyarrow 支持存储 pandas 数据帧:
import pyarrow
pyarrow.Table.from_pandas(dataset)
【讨论】:
【参考方案6】:有一个名为 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')
【讨论】:
以上是关于Python:将熊猫数据框保存到镶木地板文件的主要内容,如果未能解决你的问题,请参考以下文章
使用 python 和 pandas 传输和写入 Parquet 得到时间戳错误