Python如何用for循环将Pandas DataFrame值写入自定义类属性
问题原因与解决方法
核心错误原因
- 你在执行
newMessage=Message()时已经自动调用了类的__init__初始化方法,该方法要求传入time/id/type/source/destination共5个必填参数,你未传入任何参数,直接触发了参数缺失异常。 __init__是类实例化过程中自动执行的方法,不需要你在后续手动调用。- 你的业务逻辑是要为DataFrame的每一行生成一个独立的Message实例,不应该在循环外只创建一个实例反复修改。
- 额外注意:你代码中取DataFrame行值的键名大小写不统一,比如传入参数用
row['id']、print语句用row['ID'],参数匹配错误会后续触发KeyError,需要和你DataFrame实际的列名完全保持一致。 - 补充:你贴出的
Message类定义存在缩进错误,__init__方法需要缩进在类内部,否则Python会将其识别为独立函数。
正确实现代码
如果需要把每行对应的Message实例存储下来,可以用列表收纳所有实例,示例代码如下:
class Message: def __init__(self, time, id, type, source, destination): self.time = time self.id = id self.type = type self.source = source self.destination = destination # 遍历DataFrame生成实例 message_list = [] # 注意此处row取键的名称要和你DataFrame的列名完全一致,包括大小写 for index, row in df.iterrows(): # 实例化时直接传入参数,自动调用__init__完成初始化 new_message = Message( time=row['time'], id=row['id'], type=row['type'], source=row['source'], destination=row['destination'] ) message_list.append(new_message) # 打印时键名也要和实际列名一致 print(row['time'], row['id'], row['type'], row['source'], row['destination'])
内容的提问来源于stack exchange,提问作者vloubes
相关产品推荐
相关产品推荐

