Pandas数据帧枢轴内存E

2024-09-27 07:33:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个具有以下结构的数据帧df

        val          newidx    Code
Idx                             
0       1.0      1220121127    706
1       1.0      1220121030    706
2       1.0      1620120122    565

它有1000000条线路。 我们总共有600个唯一的Code值和200000个唯一的newidx值。

如果我执行以下操作

df.pivot_table(values='val', index='newidx', columns='Code', aggfunc='max')

我得到一个MemoryError。但这听起来很奇怪,因为生成的数据帧的大小应该是可持续的:20000x600。

这种操作需要多少内存?是否有方法修复此内存错误?


Tags: columns数据内存dfindextablecodeval
2条回答

我最近在执行4个数据帧之间的合并时遇到了一个非常类似的问题。

对我有用的是在groupby期间禁用索引,然后合并。

如果@Kartiks answer不起作用,请在分块数据帧之前尝试此操作。

df.groupby(['newidx', 'Code'], as_index=False)['val'].max().unstack()

试着看看这是否符合你的记忆:

df.groupby(['newidx', 'Code'])['val'].max().unstack()

pivot_table不幸的是内存非常密集,因为它可能会生成多个数据副本。


如果groupby不起作用,则必须将数据帧分割成更小的片段。尽量不要分配多次。例如,如果从csv读取:

df = pd.read_csv('file.csv').groupby(['newidx', 'Code'])['val'].max().unstack()

避免多次分配。

相关问题 更多 >

    热门问题