如何将Pandas DataFrame每行数据加载为Gene类对象?
将DataFrame每行转为Gene类对象的方法
这里有几种实用的方法可以把你的Pandas DataFrame每一行数据转换成自定义的Gene类对象,我一步步给你说明:
基础方法:用iterrows()遍历
这是最直观的方式,逐行遍历DataFrame,提取对应字段来实例化Gene对象:
import pandas as pd # 你的Gene类定义 class Gene: def __init__(self, id, nb_obj, nb_days): self.id = id self.nb_obj = nb_obj self.nb_days = nb_days # 构造示例DataFrame(如果你的df已经存在就不用这步) df = pd.DataFrame({ 'ID': ['ECGYE', 'NLRTM'], 'nb_obj': [10259, 8007], 'nb_days': [62.965318, 46.550562] }) # 初始化一个列表来存储Gene对象 gene_objects = [] # 遍历每一行(下划线用来接收不需要的索引值) for _, row in df.iterrows(): # 从行中提取对应值,传入Gene构造函数 gene = Gene( id=row['ID'], nb_obj=row['nb_obj'], nb_days=row['nb_days'] ) gene_objects.append(gene) # 验证结果(可选) for gene in gene_objects: print(f"ID: {gene.id}, 目标数: {gene.nb_obj}, 天数: {gene.nb_days:.2f}")
简洁方法:用apply()函数
如果想写得更紧凑,可以用Pandas的apply()方法,按行处理数据:
# 一行代码完成转换 gene_objects = df.apply( lambda row: Gene(row['ID'], row['nb_obj'], row['nb_days']), axis=1 # axis=1表示按行处理 ).tolist()
进阶技巧:匹配字段名简化代码
如果你的DataFrame列名和Gene类的参数名完全一致(比如把ID改成id),可以用字典解包来省去手动指定每个参数的麻烦:
# 先重命名列名匹配Gene的参数 df_renamed = df.rename(columns={'ID': 'id'}) # 用**解包行字典来实例化对象 gene_objects = df_renamed.apply( lambda row: Gene(**row.to_dict()), axis=1 ).tolist()
这种方式在类的字段较多时特别有用,不用逐个写参数名,减少出错概率。
内容的提问来源于stack exchange,提问作者funkyFunk
相关产品推荐
相关产品推荐

