Pandas中使用iterrows()获取行name值而非索引的问题
问题:Pandas iterrows()遍历行时,输出name列得到的是索引值而非实际内容
问题原因
你遇到的问题是因为iterrows()返回的row是一个Series对象,这个对象自带的.name属性指向的是DataFrame的行索引(默认是0、1这类自增数字),而不是你CSV里的name列。刚好你的列名也是name,和Series的内置属性重名了,所以直接用row.name会调用到Series的索引名称,而非列值。
解决代码
把row.name改成row['name']就能正确获取CSV里的name列值,同时可以简化文件读取的写法(pandas.read_csv直接支持传入文件名,不需要手动open):
import pandas as pd # 别忘了导入pandas,你的原代码遗漏了这行 examples = pd.read_csv("examples.csv") for index, row in examples.iterrows(): # 同时打印name、month、day列的预期值 print(f"name: {row['name']}, month: {row['month']}, day: {row['day']}")
额外提示
如果列名和Series的内置属性不重名,用row.列名的点语法是可行的,但遇到像name这种冲突列名,必须用row['列名']的索引访问方式。另外,若仅需遍历特定列,推荐用itertuples(),性能比iterrows()更优,适合数据量大的场景:
import pandas as pd examples = pd.read_csv("examples.csv") # index=False表示不返回行索引 for row in examples[['name','month','day']].itertuples(index=False): print(f"name: {row.name}, month: {row.month}, day: {row.day}")
内容的提问来源于stack exchange,提问作者user14657411
相关产品推荐
相关产品推荐

