如何从pandas DataFrame中批量创建对应自定义类的实例对象
实现方案
首先先修正你原有类定义的语法问题:Python中class关键字首字母小写,def和__init__之间需要加空格,修正后的代码如下:
class People: # 如果你不需要给实例绑定属性,保持空的__init__也可以正常使用 def __init__(self, name=None, age=None, profession=None): self.name = name self.age = age self.profession = profession
方法1:直接生成对应人名的全局实例(完全匹配你要的效果)
通过Python内置的globals()函数动态给全局作用域添加变量,遍历DataFrame的人名列批量创建实例即可:
import pandas as pd # 构造你的示例DataFrame df = pd.DataFrame({ 'People': ['Jorge', 'Nathan'], 'Age': [29, 36], 'Profession': ['Student', 'Engineer'] }) # 批量创建实例 for _, row in df.iterrows(): # 如果不需要绑定属性,直接写 globals()[row['People']] = People() 即可 globals()[row['People']] = People( name = row['People'], age = row['Age'], profession = row['Profession'] )
运行后你就可以直接调用Jorge、Nathan两个实例,比如执行print(Jorge.age)会输出29。
方法2:存入字典(更安全,推荐)
直接生成全局变量如果遇到人名和现有变量重名的情况会覆盖原有变量,更稳妥的方式是把所有实例统一存在字典中调用:
people_instance = {} for _, row in df.iterrows(): people_instance[row['People']] = People( name = row['People'], age = row['Age'], profession = row['Profession'] ) # 调用方式 print(people_instance['Nathan'].profession) # 输出 Engineer
内容的提问来源于stack exchange,提问作者Uirajan Silva
相关产品推荐
相关产品推荐

