如何从pandas DataFrame创建指定字段的namedtuple列表
方案正确性说明
你写的实现代码完全正确,这就是pandas场景下生成目标namedtuple列表的标准、最高效实现,不需要额外手动调用collections模块的namedtuple做二次构造。itertuples方法本身内部就会基于你传入的name参数自动创建对应命名的namedtuple类型:
- 提前筛选
["Name","Age"]两列,正好匹配你需要保留的字段 - 设置
index=False会排除DataFrame默认的索引字段,不会多出多余列 - 设置
name='Variable'正好对应你期望的namedtuple类名
你可以直接运行测试,输出结果和你给出的期望结构完全一致:
import pandas as pd # 构造示例DataFrame df1 = pd.DataFrame({ "Name": ["Harry", "James", "Will"], "Category": ["A", "B", "A"], "Age": [11, 23, 19] }) output_list = list(df1[["Name","Age"]].itertuples(name='Variable', index=False)) print(output_list) # 输出: [Variable(Name='Harry', Age=11), Variable(Name='James', Age=23), Variable(Name='Will', Age=19)]
其他可选实现(不推荐)
如果你一定要显式调用collections模块的namedtuple来构造,也可以用如下写法,但这种写法遍历效率比原生itertuples低很多,没有特殊需求没必要这么写:
from collections import namedtuple # 先定义namedtuple结构 Variable = namedtuple("Variable", ["Name", "Age"]) # 逐行构造 output_list = [Variable(row.Name, row.Age) for _, row in df1[["Name","Age"]].iterrows()]
注意事项
如果你的DataFrame列名存在不符合Python标识符规范的情况(比如列名带空格、以数字开头、和Python关键字重名),itertuples会自动对非法列名做加下划线的重命名处理,你当前示例里的Name、Age都是合法标识符,不会出现字段名异常的问题。
内容的提问来源于stack exchange,提问作者star_it8293
相关产品推荐
相关产品推荐

