我遇到与link类似的问题。
那里的解决方案似乎不适用于我的特定情况。我认为这是因为数据帧的大小。
我有一个大小的df(2,018,901 - 6)和一个长度为2,083,656的列表。列表的目的(如上面的链接)是在原始df中插入缺少的时隙。
我尝试了已接受的链接解决方案,但程序一直在无休止地运行。第二种解决方案,即
df.merge(how='right', on='A', right = pd.DataFrame({'A':my_list})).sort(columns='A').reset_index().drop(['index'], axis=1)
引发此错误:
***MemoryError:
为了解决我的问题,我将市场清算价格存储在df中。对于每小时每小时(ts)-1,有24个开放交易时段,对应于接下来的24小时。在某些方面,市场可能不清楚,因此我有一个差距。
例如,让我们说它当前是1.在这个时间点,接下来的24 ts是开放的(从ts 2到ts 25)。在当前的ts 2,开放的ts将是3到26,依此类推。所以在数据中我每个ts都有一行(顺便说一下,也重复了ts)。当某些ts没有清算时,数据就会跳跃。
我想用
填补空白my_list
这是因为我正在与其他来源进一步处理数据,而且没有任何差距。
这是一段df:
A 1 2 bin bin_t1 bin_dum
89 381.0 0.6 153.8 11 7 7.0
90 382.0 0.5 59.4 7 7 7.0
91 383.0 0.5 53.4 7 6 6.0
92 384.0 0.4 45.9 6 6 6.0
93 385.0 0.4 46.5 6 6 6.0
94 386.0 0.3 45.4 6 6 6.0
95 387.0 740.8 34.1 6 5 5.0
96 365.0 0.1 2.4 5 5 5.0
97 366.0 0.1 0.5 5 6 6.0
98 388.0 732.8 38.5 6 5 5.0
99 366.0 1.7 2.7 5 5 5.0
A栏代表开放的ts。从第97行跳到98,即从366跳到388.所以在my_list中,我有完整的序列,缺少ts,在这种情况下
367 368 369 370 ... 387
这个想法是通过完成破碎的序列使df更大,并用零填充其余的列。
除了上一行代码之外,我尝试过的是
df.set_index('A')
new_index = pd.Index(my_list, name='A')
df.set_index('A').reindex(new_index)
df.set_index('A').reindex(new_index).reset_index()
这种方法一直在运行。
df和my_list的形状分别为
[2018901 rows x 6 columns]
[1 row x 2083656 columns]
我该如何处理?
谢谢
修改
初始数据来自多个文件。为了消除尺寸怀疑,我尝试在由单个文件组成的数据框中执行前面提到的解决方案。
现在我收到此错误,类似于case:
*** ValueError: cannot reindex from a duplicate axis
我无法消除重复的价值。有工作吗?
感谢。