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

求助:如何按列名将DataFrame数据映射为自定义对象列表

问题描述

我有如下DataFrame表格:

idshopvar1var2
1aab
2bbc

我希望仅使用id和shop列生成Test对象的列表,但表格的列顺序可能不固定,所以需要通过列名而非索引来实现(当前代码用的是索引方式)。

现有代码如下:

class Test:
  def __init__(self, id, shop):
    self.id = id
    self.shop = shop

def test_list(df:pd.DataFrame)->list:
    return list(map(lambda x:Test(id=x[0],shop=x[1]),df.values.tolist()))
解决方案

可以通过指定列名提取数据,再逐行构造Test对象,以下是几种简洁的实现方式:

方法一:使用itertuples()迭代指定列

利用itertuples()按行迭代筛选后的列,直接通过属性名取值,完全不受列顺序影响:

import pandas as pd

class Test:
    def __init__(self, id, shop):
        self.id = id
        self.shop = shop

def test_list(df: pd.DataFrame) -> list:
    # 先筛选目标列,再迭代每行构造对象
    return [Test(id=row.id, shop=row.shop) for row in df[['id', 'shop']].itertuples(index=False)]

方法二:使用apply()逐行处理

通过apply按行遍历,直接通过列名字典取值:

import pandas as pd

class Test:
    def __init__(self, id, shop):
        self.id = id
        self.shop = shop

def test_list(df: pd.DataFrame) -> list:
    return df.apply(lambda row: Test(id=row['id'], shop=row['shop']), axis=1).tolist()

方法三:转换为字典列表后构造对象

将指定列转为字典列表,再通过字典解包参数构造对象,代码更简洁:

import pandas as pd

class Test:
    def __init__(self, id, shop):
        self.id = id
        self.shop = shop

def test_list(df: pd.DataFrame) -> list:
    # 把每行转为{'id': 值, 'shop': 值}的字典,再解包传入构造方法
    return [Test(**item) for item in df[['id', 'shop']].to_dict('records')]

内容的提问来源于stack exchange,提问作者CGarden

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 02:30:54