如何高效地保存一个大的pandas.Dataframe,有百万甚至十亿行且没有错误?

问题描述 投票:0回答:2

如何以良好的读取速度将大型 Dataframe 保存到磁盘?

我有一个很大的数据集(youtube 8M),现在我已经将原始数据提取到字典中。我想将其保存为数据框,以便使用 pytorch 数据集按索引读取。

具体而言,验证数据如下所示:

<class 'pandas.core.frame.DataFrame'>
Int64Index: 1112356 entries, 0 to 1112355
Data columns (total 4 columns):
id            1112356 non-null object
mean_rgb      1112356 non-null object
mean_audio    1112356 non-null object
label         1112356 non-null object
dtypes: object(4)
memory usage: 42.4+ MB

dtypes 列出如下:

id : str
mean_rgb : numpy.ndarray
mean_audio : numpy.ndarray
label :  numpy.ndarray

我想将它保存到磁盘,以便我可以有效地读取它。 首先,我将

hdf5
pd.to_hdf()
一起使用,但我得到了
OverFlowError

然后,我转向

csv
并成功保存。然而,当我从这个
.csv
读取数据时,我得到了一个损坏的
dataframe
。其中行数大大超过1112356

最后我用

dataframe
csv
保存到
chunksize=1000
,读取结果还是有
2842137
行错误,内部数据也比较混乱。

RangeIndex: 2842137 entries, 0 to 2842136
Data columns (total 1 columns):
widwmean_rgbwmean_audiowlabel    object
dtypes: object(1)
memory usage: 21.7+ MB

python pandas csv hdf5
2个回答
0
投票

Joblib 和 klepto python 包可能会帮助你。

另一方面,您可以在一个块中最多进行分块存储,同时迭代存储和加载并在最后合并。


0
投票

我使用 parquet 文件格式保存我的数据帧(400 万行),另存为 csv 输出的重量超过 500MB,使用压缩 parquet 文件我得到一个 7MB 的文件。这是我的代码基于 Python: save pandas dataframe to parquet file:

中的答案
import pandas as pd
import pyarrow as pa
import pyarrow.parquet as pq

df = your_dataframe 
table = pa.Table.from_pandas(df)
pq.write_table(table, 'tb.parquet', compression='GZIP')

要读取导出的文件,您可以使用以下代码:

pqt = pd.read_parquet('tb.parquet', engine='pyarrow')

在 power bi 中可以毫无问题地导入 parquet 文件。

我知道这是一篇旧帖子,但我希望它对某人有所帮助,如果有更好的方法,我想知道。

© www.soinside.com 2019 - 2024. All rights reserved.