如何将每个 Pandas 数据框行转换为包含列值作为属性的对象?

问题描述 投票:0回答:2

假设我有一个包含以下列“NAME”、“SURNAME”、“AGE”的 DataFrame,我想为每一行创建一个对象,包括这些列值作为其变量。

person = ConvertRow2Object(frame.iloc[0,:])
print person.NAME //outputs Gary

如何使用针对具有任何类型的列名称和数据类型的任何 DataFrame 的通用解决方案来做到这一点?

python pandas
2个回答
15
投票

您可以将整个内容转换为 numpy 记录,然后数组中的每条记录都有属性:

people = frame.to_records()
person = people[0]
print person.NAME  # etc...

使用命名元组似乎也有效:

from collections import namedtuple

Person = namedtuple('Person', frame.dtypes.index.tolist())
person = Person(*frame.iloc[0,:])
print person.NAME  # etc...

2
投票

这种创建字典对象并将其作为 init 参数传递的技术对我有用。 这也更通用,因为您不需要输入键/属性名称

# AppInfo = Class which I wanted to create instance objects for each row in df 
class AppInfo:
    def __init__(self, attr_dict):
        if attr_dict is not None:
            for key, value in attr_dict.items():
                setattr(self, key.replace(' ', '_'), value)


# in my code this methods creates a list of AppInfo objects created from the dataframe

def get_app_infos() -> List[AppInfo]:
    df = data.query_from_db()
    [AppInfo(a) for a in df.to_dict('records')]
© www.soinside.com 2019 - 2024. All rights reserved.