我有一个 Panda 的 DataFrame,其中有很多条目。如果可能的话,我想按行创建一个对象而不进行迭代。
即:
Age Name
-----------
0 13 John
1 16 Marc
2 17 Prisl
3 14 Mike
4 11 Robert
这可能吗?我在文档中没有找到任何与此相关的内容。
最佳答案
如果你想要一个对象列表,你可以使用itertuples
,它们返回namedtuple
对象(好吧,几乎)。
list(df.itertuples(name='Person', index=False))
[Person(Age=13, Name='John'),
Person(Age=16, Name='Marc'),
Person(Age=17, Name='Prisl'),
Person(Age=14, Name='Mike'),
Person(Age=11, Name='Robert')]
<小时/>
另一个想法使用namedtuple
和apply
。
from collections import namedtuple
cls = namedtuple(typename='Person', field_names=df.columns.tolist())
df.apply(lambda r: cls(**r.to_dict()), 1)
0 (13, John)
1 (16, Marc)
2 (17, Prisl)
3 (14, Mike)
4 (11, Robert)
dtype: object
df.apply(lambda r: cls(**r.to_dict()), 1).tolist()
[Person(Age=13, Name='John'),
Person(Age=16, Name='Marc'),
Person(Age=17, Name='Prisl'),
Person(Age=14, Name='Mike'),
Person(Age=11, Name='Robert')]
<小时/>
如果您对类(class)不感兴趣,可以使用 to_dict
返回记录列表。
df.to_dict('records')
[{'Age': 13, 'Name': 'John'},
{'Age': 16, 'Name': 'Marc'},
{'Age': 17, 'Name': 'Prisl'},
{'Age': 14, 'Name': 'Mike'},
{'Age': 11, 'Name': 'Robert'}]
关于python - 有效地将 DataFrame 列转换为对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45816730/