python - 如何有效地保存具有百万甚至十亿行的大型 pandas.Dataframe 而没有错误?
问题描述
如何以良好的读取速度将大型 Dataframe 保存到磁盘?
我有一个大型数据集(youtube 8M),现在我已将原始数据提取到 dict。我想将它保存为数据框,以便使用 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
with pd.to_hdf()
,但我得到了一个OverFlowError
.
然后,我转向csv
成功保存。但是,当我从中读取数据时.csv
,我得到一个损坏的dataframe
. 其中行数大大超过1112356。
最后,我用 保存了dataframe
to 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
解决方案
Joblib 和 klepto python 包可能会对您有所帮助。
另一方面,您可以在一个块中进行最大分块存储,同时迭代地存储和加载并在最后合并。
推荐阅读
- c++ - how to remove only one hyphen (first occurance) from the string(file name) in CPP?
- c - 在 Solaris 机器 5.11 上找不到 sys/fdio.h(软盘控制操作)
- react-native - 无法从反应导航工作中获取标签栏
- python - 重新启动循环以迭代用户字符串
- javascript - How do you inject this code into HTML using Javascript?
- swift - 如何在领域swift中实现json
- python - 具有多个测试类的python单元测试
- c# - 为什么重新启动 VM 后在 Visual Studio 中删除断点?
- google-app-engine - Using Firestore in a Google App Engine project
- poco-libraries - 如何在 Poco:FileChannel "Path" 属性中使用环境变量