【发布时间】:2023-04-06 09:56:01
【问题描述】:
我正在尝试将一个非常大的数据帧 df1 重塑为 df2,但由于它的大小,我遇到了内存错误:
dict1 = [{'12/21/18': 0,'12/22/18': 0,'12/23/18': 1,'12/24/18': 1},
{'12/21/18': 1,'12/22/18': 1,'12/23/18': 0,'12/24/18': 1},
{'12/21/18': 0,'12/22/18': 1,'12/23/18': 0,'12/24/18': 0},
{'12/21/18': 1,'12/22/18': 0,'12/23/18': 1,'12/24/18': 1}]
df1 = pd.DataFrame(dict1, index= ['AAPL','CSCO','GE','MSFT' ])
dict2 = [{'Ticker': 'AAPL','Date': '12/23/18'},
{'Ticker': 'AAPL','Date': '12/24/18'},
{'Ticker': 'CSCO','Date': '12/22/18'},
{'Ticker': 'CSCO','Date': '12/24/18'},
{'Ticker': 'GE', 'Date': '12/22/18'},
{'Ticker': 'MSFT','Date': '12/24/18'}]
df2 = pd.DataFrame(dict2)
这是我迄今为止尝试过的:
df1.index.name = 'Ticker'
df2 = df1.reset_index().melt(id_vars='Ticker',var_name='Date')
df2 = df2[df2.value == 1].set_index('Ticker').filter(['Date','Ticker']).sort_index()
但它只适用于小例子。有没有办法在小块中做到这一点?
【问题讨论】:
-
调查 Dask 能帮到你吗? docs.dask.org/en/latest/why.html
-
感谢您的建议,但我的数据集并没有那么大,无法使用 Dask 之类的界面来证明其合理性。我希望有一个更简单的解决方案,也许使用一个在事物之间存储数据帧的循环?