高效地将数据帧列转换为对象

2024-10-03 15:27:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个熊猫的数据框,里面有很多条目。如果可能的话,我想按行创建一个对象而不进行迭代。你知道吗

即:

       Age   Name
       -----------
    0   13   John
    1   16   Marc
    2   17   Prisl
    3   14   Mike
    4   11   Robert

有可能吗?我在文件上找不到这方面的东西。你知道吗


Tags: 文件数据对象nameage条目marcjohn
1条回答
网友
1楼 · 发布于 2024-10-03 15:27:51

如果需要对象列表,可以使用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')]

另一个想法是使用namedtupleapply。你知道吗

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')]

如果您对类不是特别感兴趣,那么可以使用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'}]

相关问题 更多 >