有没有更简单的方法将DataFrame行的值分配给自定义对象中的相应变量?

时间:2018-06-22 18:14:14

标签: python pandas dataframe series

假设我有以下带有一些示例行的DataFrame:

         id    first_name   last_name   age
   0     1     John         Doe         18
   1     2     Joe          Shmuck      21

比方说,我还有一个名为Person的自定义Python类,该类应表示上面DataFrame的值。为了方便起见,DataFrame的列名称与该类的属性完全对应。

class Person:
    id
    first_name
    last_name
    age

我知道我可以通过提供列索引或列名直接从(数据帧的)行中检索值,例如:df.iloc[0]['age'],但是我想在我的整个应用程序和调用中采用稍微更安全的编码实践person.age甚至是更好的person.get_age()吸气剂。

我做的唯一的原始方法是遍历DataFrame的一行的列,检索每个单元格并将它们逐个分配给新Person对象的变量。例如:person.first_name = df.loc[0]['first_name']

DataFrame或Series或任何其他Python库提供了有用的工具来简化此过程吗?即一些诸如person = df.loc[0].transform(type=Person)

的如意算盘

1 个答案:

答案 0 :(得分:1)

您真的需要为此上课吗?您可以使用df.itertuples创建“人员” namedtuple列表:

>>> list(df.itertuples(index=False, name='Person'))

[Person(id=1, first_name='John', last_name='Doe', age=18),
 Person(id=2, first_name='Joe', last_name='Shmuck', age=21)
]

在可以访问其属性(p.agep.id等)的意义上,命名元组的行为与类非常相似。

for p in df.itertuples(index=False, name='Person'):
    print(p.first_name)

John
Joe