熊猫数据透视表返回MemoryError

时间:2020-04-02 23:43:49

标签: python pandas dataframe pivot-table pandas-groupby

我有一个数据框,希望将其汇总到多列上(准确地说是7列),并返回多列的总和(4)。数据帧为172k行,具有13列,占用13.2MB(下面的完整详细信息)。

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 172038 entries, 0 to 172037
Data columns (total 13 columns):
index              172038 non-null int64
processing_date    172038 non-null int64
mgr_name           171910 non-null category
mgr_code           171937 non-null category
sub_mgr_name       133271 non-null category
sub_mgr_code       133287 non-null category
acct_id            172038 non-null int64
product_id         172038 non-null int64
fx_rate_usd        172038 non-null float64
settle_date_qty    172038 non-null float64
settle_date_mv     172038 non-null float64
seg_memo_qty       18956 non-null float64
restricted_qty     810 non-null float64
dtypes: category(4), float64(5), int64(4)
memory usage: 13.2 MB

然后,我尝试使用以下方法进行旋转:

client_grp_cols = ["processing_date", "mgr_name", "mgr_code", "sub_mgr_name",\
                      "sub_mgr_code", "acct_id", "product_id"]

client_sum_cols = ["settle_date_qty", "settle_date_mv", "seg_memo_qty", "restricted_qty"]


df_clients = df_client.pivot_table(index=client_grp_cols,
                                   values=client_sum_cols,
                                   aggfunc='sum')

然后我得到以下错误:

MemoryError: Unable to allocate 237. PiB for an array with shape (266838394019915520,) and data type int8

有人可以帮助我了解这种情况如何发生以及如何补救吗?我了解数据透视表可能会占用大量内存,但是我没想到它会造成这种情况。我知道我可以改用dask,但我真的想尝试停留在大熊猫中(特别是因为我的基本数据帧只有13mb,并且没有接近PC内存限制的地方,所以我认为我不必这样做)。 / p>

谢谢!

0 个答案:

没有答案