大数据集下pandas脚本报Single positional indexer is out-of-bounds错误求助
问题原因
- 直接报错原因:你在代码行
df1.iloc[b, 1] = df1.iloc[b, 1] + df2.iloc[b, 1]中,使用遍历df1的索引b同步访问df2的行。当df1的长度大于df2的长度时,b的取值会超过df2的最大行索引,直接触发索引越界错误。你的小测试用例刚好两个字典长度一致,且所有key都不重复,所以没有触发这个问题。 - 隐藏逻辑错误:就算索引不越界,你的取值逻辑也是错的:你匹配的是df2第
a行的key,对应的要累加的应该是df2第a行的分值,而不是第b行的分值。小测试用例所有value都是1,所以加错了也不会发现结果异常。
另外你用到的df.append方法在新版pandas中已经被正式弃用,继续使用也会存在兼容隐患。
最优解决方案
你的需求是合并两个词频统计DataFrame,相同词的出现次数求和,完全不需要手动写嵌套循环、也不需要转字典处理,用pandas内置的合并分组能力一行即可实现,性能更高也不会出现索引问题:
import pandas as pd # 直接合并两个DataFrame后按word分组,对occurance字段求和 merged_df = pd.concat([words_total, words_date]).groupby('word', as_index=False)['occurance'].sum()
原有循环代码的修复方案(不推荐)
如果你一定要修复原有循环代码,只需要把累加行的df2索引从b改为a即可,但该实现性能远低于内置方案,仅作参考:
# 仅修改这一行即可解决报错 df1.iloc[b, 1] = df1.iloc[b, 1] + df2.iloc[a, 1]
内容的提问来源于stack exchange,提问作者Robin5454
相关产品推荐
相关产品推荐

