pandas - 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]。
解决方案
尝试使用 dask。
import dask.dataframe as dd
unserialized_df = dd.read_feather("raw_df.feather").compute()
推荐阅读
- python - 如何在路由函数中为 Flask app.config 提供参数?
- forms - 通过 FORM 我想将值返回给 Column
- php - 如何将散列密码上传到我的数据库?
- python - 推荐的python科学工作流管理工具,它定义了参数状态而不是时间的依赖完整性?
- matrix - 恒等式 Fortran DGEMM 上的 Lapack 矩阵乘法
- python - 如何从字典列表中提取值?
- combinatorics - 游戏谜题:蒙眼与对手掷硬币
- javascript - 如何在没有文本扭曲的情况下将文本中心与无序列表对齐?
- reactjs - 使用钩子触发子组件(反应表)的重新渲染
- google-apps-script - 如何在最后一列中写入数据?