在Pandas DataFrame中更新数据时遇内存错误,求排查方法
问题分析与解决方法
错误原因
你遇到的内存爆炸问题,大概率是因为DataFrame存在重复索引——当用loc配合布尔索引操作时,Pandas会触发隐式的广播机制,试图生成一个行数平方级的临时数组(也就是你看到的439547×439547的数组),直接超出了内存上限。
解决办法
不需要纠结loc的写法,换更简单直接的方式,或者先处理索引问题:
方法1:直接用replace(最推荐)
这是Pandas里替换单一值最稳妥的方式,完全不会触发内存问题:
df['RATING'] = df['RATING'].replace('BB2', 'BB')
方法2:先重置索引再用loc
如果一定要用loc的写法,先把重复索引去掉:
# 重置索引,丢弃原来的重复索引 df = df.reset_index(drop=True) # 再执行你的替换代码 df.loc[df["RATING"]=="BB2", "RATING"] = "BB"
方法3:验证索引问题
先确认是不是重复索引导致的,执行这条代码看输出:
print(df.index.is_unique)
如果返回False,就说明确实是重复索引引发的广播问题,用方法2处理即可。
内容的提问来源于stack exchange,提问作者IamaNOOB
相关产品推荐
相关产品推荐

