假设我有以下带有一些示例行的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)
答案 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.age
,p.id
等)的意义上,命名元组的行为与类非常相似。
for p in df.itertuples(index=False, name='Person'):
print(p.first_name)
John
Joe