如何使用Python面向对象方法读取CSV文件并存储为多列DataFrame
问题核心原因
你现有代码的问题主要有3个:
- 没有提前定义正确的字段表头,错误将CSV第二行数据当作表头做字段映射
__repr__方法仅返回了你自定义的date_xx字符串,导致打印实例看不到实际存储的字段值- 没有正确调用实例属性,也没有实现DataFrame的转换逻辑
修正后可直接运行的代码
import csv import pandas as pd class CsvRecord: # 预定义和你需求匹配的5个表头字段 HEADER = ["id", "date", "status", "number", "email"] def __init__(self, row): # 将每行数据和表头绑定,生成实例属性 for field, value in zip(self.HEADER, row): setattr(self, field, value) # 自定义打印格式,方便直接查看实例内容 def __repr__(self): return f"CsvRecord(id={self.id}, date={self.date}, status={self.status}, number={self.number}, email={self.email})" # 提供转字典方法,方便后续批量转DataFrame def to_dict(self): return {field: getattr(self, field) for field in self.HEADER} # 读取CSV文件(with语法会自动关闭文件,避免资源泄漏) with open("complete_list.csv", "r", encoding="utf-8") as f: reader = csv.reader(f) # 逐行生成记录实例 record_instances = [CsvRecord(row) for row in reader] # 可以直接通过属性访问任意字段,比如取第一条记录的邮箱 print(record_instances[0].email) # 转换为你需要的DataFrame格式 df = pd.DataFrame([record.to_dict() for record in record_instances]) print(df)
运行上述代码即可得到你要求格式的DataFrame,也可以自由访问任意行的任意字段值。
内容的提问来源于stack exchange,提问作者Jack Zaki Zakiul Fahmi Jailani
相关产品推荐
相关产品推荐

