将熊猫数据框转换为命名元组列表

Mic*_*ael 5 python tuples namedtuple pandas

我正在寻找将a pandas DataFrame转换为类型列表的最有效方法NamedTuple-以下是具有预期输出的简单示例。我想获得与数据帧中定义的类型对齐的正确类型转换。

from typing import NamedTuple
import pandas as pd

if __name__ == "__main__":
    data = [["tom", 10], ["nick", 15], ["juli", 14]]
    People = pd.DataFrame(data, columns=["Name", "Age"])
    Person = NamedTuple("Person", [("name", str), ("age", int)])
    # ...
    # ...
    # expected output
    # [Person(name='tom', age=10), Person(name='nick', age=15), Person(name='juli', age=14)]
Run Code Online (Sandbox Code Playgroud)

jez*_*ael 7

DataFrame.itertuplesname参数一起使用,并省略索引add index=false

tup = list(people.itertuples(name='Person', index=False))
print(tup)
[Person(Name='tom', Age=10), Person(Name='nick', Age=15), Person(Name='juli', Age=14)]
Run Code Online (Sandbox Code Playgroud)

如果需要小写值nameage在namedtuples中添加rename

tup = list(people.rename(columns=str.lower).itertuples(name='Person', index=False))
print(tup)
[Person(name='tom', age=10), Person(name='nick', age=15), Person(name='juli', age=14)]
Run Code Online (Sandbox Code Playgroud)


Dan*_*ejo 5

使用迭代

import pandas as pd

data = [["tom", 10], ["nick", 15], ["juli", 14]]
people = pd.DataFrame(data, columns=["Name", "Age"])

result = list(people.itertuples(index=False, name='Person'))
print(result)
Run Code Online (Sandbox Code Playgroud)

输出

[Person(Name='tom', Age=10), Person(Name='nick', Age=15), Person(Name='juli', Age=14)]
Run Code Online (Sandbox Code Playgroud)