我有一个数据框,希望将其汇总到多列上(准确地说是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>
谢谢!