簡體   English   中英

Pandas - 序列化大 DataFrame

[英]Pandas - Serialize Large DataFrame

我想序列化我的 DataFrame。DataFrame 使用 memory 的 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

當我用 feather 序列化 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 的最佳方法是什么?

我將 ml.m4.10xlarge AWS 實例與帶有 JupyterLab 接口的 SageMaker 一起使用。 我有 30GB 可用存儲空間,已使用 4GB,因此我應該會受到存儲空間限制的影響。

我有 160GiB 的主 memory,所以處理整個 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()

來源: 將文件夾中的許多羽毛文件加載到dask

另一種選擇是使用一種有效的二進制格式來序列化表格數據,稱為BinTableFile Github source code 它索引文件中的數據,並通過 integer 索引從文件中間高效讀取,並使用 Cython 編寫以提高速度效率。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM