You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:19:36