python - 将多个 Parquet 文件加载到数据框中进行分析

标签 python pandas dataframe parquet

我有几个 .parquet 文件,每个文件的形状为 (1126399, 503),大小为 13MB。据我所知和我所读到的内容,这应该能够在本地计算机上很好地处理。我试图将它们放入 pandas 数据帧中以运行一些分析,但这样做遇到困难。将它们保存到 CSV 文件的成本太高,因为文件变得非常大,并且将它们直接加载到多个数据帧中,然后连接会给我带来内存错误。我从未使用过 .parquet 文件,并且不确定最佳前进路径是什么或如何使用这些文件对数据进行实际分析。

一开始,我尝试过:

import pandas as pd
import pyarrow.parquet as pq

# This is repeated for all files
p0 = pq.read_table('part0.parquet') # each part increases python's memory usage by ~14%
df0 = part0.to_pandas() # each frame increases python's memory usage by additional ~14%

# Concatenate all dataframes together
df = pd.concat([df0, df1, df2, df3, df4, df6, df7], ignore_index=True)

这导致我内存不足。我正在一个 12 核和 32GB 内存的系统上运行。我认为我会更有效率,并尝试循环并删除不再需要的文件:

import pandas as pd

# Loop through files and load into a dataframe
df = pd.read_parquet('part0.parquet', engine='pyarrow')
files = ['part1.parquet', 'part2.parquet', 'part3.parquet'] # in total there are 6 files

for file in files:
    data = pd.read_parque(file)
    df = df.append(data, ignore_index=True)
    del data

不幸的是,这些都不起作用。非常感谢任何和所有的帮助。

最佳答案

我打开了https://issues.apache.org/jira/browse/ARROW-3424至少在 pyarrow 中创建一个函数,该函数将尽可能高效地加载文件路径的集合。您可以使用 pyarrow.parquet.read_table 单独加载它们,将 pyarrow.Table 对象与 pyarrow.concat_tables 连接起来,然后调用 Table .to_pandas 转换为 pandas.DataFrame。这比用 pandas 连接要高效得多

关于python - 将多个 Parquet 文件加载到数据框中进行分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52613682/

相关文章:

python - 根据另一列的日期和类别创建数据排名

python - 删除或替换 Pandas 数据框中重复行中的值

python - 无法通过 Pandas 中的 lambda 填充多列中的 NaN 值

r - 如何识别两(或更多)行不同(相同 ID)的列?

python - 某些列的唯一值,DF pandas

python - 使用时间索引时 pandas 中的 xtick 标签格式

python - Matplotlib 将图像文件旋转 X 度

目录中的 Python 文件夹名称

python - 列表列表的最小值

r - 强制列表列表进入数据框