首页 > 解决方案 > Pandas - 序列化大数据帧

问题描述

我想序列化我的 DataFrame。DataFrame 使用 10.1 GB 内存并有 5900 万个条目。

df.info()

<class 'pandas.core.frame.DataFrame'>
Int64Index: 59181090 entries, 0 to 59181089
Data columns (total 22 columns):
(...)
dtypes: float64(1), int64(9), object(12)
memory usage: 10.1+ GB

当我用羽毛序列化 DataFrame 然后重新导入序列化的 DataFrame 时,它​​似乎损坏了 DataFrame。

df.("raw_df.feather")

unserialized_df = pd.read_feather("raw_df.feather")

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 22909623 entries, 0 to 22909622
Data columns (total 22 columns):
(...)
dtypes: float64(2), int64(8), object(12)
memory usage: 3.8+ GB

它还引入了少量以前没有的 NaN 值。

序列化大型 DataFrame 的最佳方法是什么?

我正在使用带有 JupyterLab 界面的 SageMaker 的 ml.m4.10xlarge AWS 实例。我有 30GB 的可用存储空间,使用了 4GB,所以我应该受到存储限制的影响。

我有 160GiB 的主内存,所以处理整个 DataFrame 应该没有问题。

我正在使用 Pandas 0.24.2 和 Python 3.6.5 |Anaconda, Inc.| (默认,2018 年 4 月 29 日,16:14:56)[GCC 7.2.0]。

标签: pandasamazon-web-servicesdata-science

解决方案


尝试使用 dask。

import dask.dataframe as dd
unserialized_df = dd.read_feather("raw_df.feather").compute()

来源:将文件夹中的许多羽毛文件加载到dask


推荐阅读