Python 无法按名称将数据框列映射到对象列表

问题描述 投票:0回答:1

我有一个如下表所示的数据框。

id 店铺 var1 var2
1 a a b
2 b b c

我想仅使用 id 和 shop 列填充对象列表,但是表中的列可能并不总是按显示的顺序排列,因此我想通过名称引用它们,而不是如下所示的索引。我在网上搜索过但找不到解决方案。

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()))
python dataframe list object
1个回答
0
投票

只需迭代数据帧的行(我假设它是 Pandas 数据帧),而无需之前转换为列表,因此您仍然可以按名称引用列:

import pandas as pd

df = pd.DataFrame([{"id": 1, "shop": "a", "var1": "a", "var2": "b"},
                   {"id": 2, "shop": "b", "var1": "b", "var2": "c"}])

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.iterrows()]

result = test_list(df)
assert len(result) == 2
assert result[0].id == 1 and result[0].shop == "a"
assert result[1].id == 2 and result[1].shop == "b"
© www.soinside.com 2019 - 2024. All rights reserved.