使用Pandas触发IndexingError: Too many indexers报错,求解决方案
问题解决:Pandas报错"too many indexers"及大数据集优化方案
错误原因
- 变量名冲突:循环中
for i, df in df.iterrows()把迭代得到的单行Series覆盖了原DataFrame对象df,后续df.at[1,'Runner']实际是对单行Series调用at方法,但Series的at仅接受单个索引参数,传入两个参数就触发"too many indexers"错误。 - 效率问题:用
iterrows()遍历大型数据集效率极低,Pandas原生矢量化操作才是最优选择。
修正方案(推荐矢量化操作)
直接用布尔索引批量更新,代码简洁且处理大数据集速度极快:
import pandas as pd userlist = ['Smith', 'Clark'] df = pd.read_csv("sample.csv") # 筛选Last Name在指定列表中的行,批量更新Runner列为Yes df.loc[df['Last Name'].isin(userlist), 'Runner'] = 'Yes'
原代码的其他问题说明
就算把循环变量名改成row(比如for i, row in df.iterrows()),逐行更新的方式在大数据集下也会因为循环开销导致运行缓慢,远不如上述矢量化方法高效。另外注意你的CSV表头里Frist Name是拼写错误,正确应为First Name,虽不影响代码运行,但建议修正避免后续混淆。
内容的提问来源于stack exchange,提问作者Frank M
相关产品推荐
相关产品推荐

