【发布时间】:2021-01-11 17:57:45
【问题描述】:
问题描述
我想取消堆叠或旋转 DataFrame,但它引发了 numpy 异常 MemoryError: Unable to allocate 1.72 GiB for an array with shape (1844040704,) and data type bool。我已经尝试使用带有数字索引-> df.pivot() 和多索引-> df.unstack() ] 的DataFrame。两者都显示相同的异常,我不知道如何解决。我不觉得我有一个包含 175199 行的异常大的数据集。我之前在超过 5mio 行的 DataFrames 上使用了 unstack。 对于完整的分析,df 甚至会变大 2 倍!
我尝试使用 df_unstacked = df.unstack(level=0) 取消堆叠
附加信息
在pivot / unstack 之前,我必须使用df['row_num'] = np.arange(len(df)) 添加一个唯一索引,因为数据集包含(想要的)重复索引条目。那是由于夏令时,10 月的一天有 25 小时。第 2 个小时是重复的。
我在带有 python 3.7 的 virtualenv 中使用 Jupyterlab。
软件包版本:
- 熊猫==1.1.2
- numpy==1.19.2
- jupyterlab==2.2.8
示例数据
value
target_frame row_num year
2017-01-01 01:00:00 0 2016 10,3706
2017-01-01 01:15:00 1 2016 27,2456
2017-01-01 01:30:00 2 2016 20,4022
2017-01-01 01:45:00 3 2016 14,4911
2017-01-01 02:00:00 4 2016 14,2611
... ...
2017-12-31 23:45:00 175195 2020 30,7177
2017-01-01 00:00:00 175196 2020 21,4708
2017-01-01 00:15:00 175197 2020 44,9192
2017-01-01 00:30:00 175198 2020 37,8560
2017-01-01 00:45:00 175199 2020 30,9901
[175200 rows x 1 columns]
想要的结果
索引将包含重复项。作为记录,我不在乎它是索引还是常规列。
value
year 2016 2017 ... 2020
target_frame
2017-01-01 01:00:00 10,3706 11 ... 32
2017-01-01 01:15:00 27,2456 12 ... 32
2017-01-01 01:30:00 20,4022 13 ... 541
2017-01-01 01:45:00 14,4911 51 ... 123
2017-01-01 02:00:00 14,2611 56 ... 12
... ...
2017-12-31 23:45:00 30,7177 12 ... 12
2017-01-01 00:00:00 21,4708 21 ... 12
2017-01-01 00:15:00 44,9192 21 ... 13
2017-01-01 00:30:00 37,8560 21 ... 11
2017-01-01 00:45:00 30,9901 12 ... 10
[35040 rows x 5 columns]
【问题讨论】:
标签: python python-3.x pandas out-of-memory