假设我有一个包含以下列“NAME”、“SURNAME”、“AGE”的 DataFrame,我想为每一行创建一个对象,包括这些列值作为其变量。
person = ConvertRow2Object(frame.iloc[0,:])
print person.NAME //outputs Gary
如何使用针对具有任何类型的列名称和数据类型的任何 DataFrame 的通用解决方案来做到这一点?
您可以将整个内容转换为 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...
这种创建字典对象并将其作为 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')]