You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过列标题直接访问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

火山引擎 最新活动