如何通过列标题直接访问pandas.DataFrame.itertuples返回的行值?
解决pandas.DataFrame.itertuples行对象无法用列标题访问的问题
嘿,这问题我碰到过!你之所以触发TypeError,是因为itertuples()返回的是命名元组(namedtuple),不是字典——命名元组本质还是元组,默认不支持字符串索引,得用它专属的访问方式。
给你两种靠谱的解决办法:
方法1:直接用属性访问(推荐)
命名元组的字段就是你的列名(包括索引列,默认叫Index),直接用.点号访问就行,这也是itertuples()设计的初衷,性能最优:
import pandas as pd df = pd.DataFrame({'num_legs': [4, 2], 'num_wings': [0, 2]}, index=['dog', 'hawk']) for row in df.itertuples(): # 直接通过属性名获取值 print(f"动物: {row.Index}, 腿的数量: {row.num_legs}, 翅膀数量: {row.num_wings}")
运行结果会和你预期的一致:
动物: dog, 腿的数量: 4, 翅膀数量: 0
动物: hawk, 腿的数量: 2, 翅膀数量: 2
方法2:转成字典后用字符串索引(适合习惯字典操作的场景)
如果你实在想用类似字典的['列名']方式访问,可以调用命名元组的_asdict()方法把它转成有序字典,不过这种方式会有轻微的性能损耗,处理超大数据集时不建议用:
for row in df.itertuples(): row_dict = row._asdict() print(f"动物: {row_dict['Index']}, 腿的数量: {row_dict['num_legs']}, 翅膀数量: {row_dict['num_wings']}")
为什么之前会报错?
你尝试用row['num_legs']这种字符串索引访问,而元组(哪怕是命名元组)的原生索引只支持整数,所以Python会抛出tuple indices must be integers, not str的错误。记住命名元组的正确打开方式是属性访问就好啦!
内容的提问来源于stack exchange,提问作者Krishna




