求助:如何按列名将DataFrame数据映射为自定义对象列表
问题描述
我有如下DataFrame表格:
| id | shop | var1 | var2 |
|---|---|---|---|
| 1 | a | a | b |
| 2 | b | b | c |
我希望仅使用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
相关产品推荐
相关产品推荐

