python - 有效地将 DataFrame 列转换为对象

标签 python pandas dataframe

我有一个 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')]
<小时/>

另一个想法使用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')]
<小时/>

如果您对类(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/

相关文章:

dataframe - 如何将列名作为参数传递给 Julia DataFrame?

python - 将相同的值分配给python中列表中的不同位置

mysql - 组合数据帧,并添加公共(public)元素的值

python - 通过遍历 Pandas 数据框中的行来创建新列

Python 数据争论问题

python - 系列的 Groupby 和 max

python - 如何在 python pandas 中将标题行转换为新列?

python - 如何在 Pandas DataFrame 中将 True/False 映射到 1/0?

python - Python中BeautifulSoup的中文字符编码错误?

Python - 如何知道您已使用 urllib2 登录