函数返回空列表:DataFrame循环创建Transaction对象存入列表失败
问题分析与修复
你的objectify函数存在两个关键错误,导致返回空列表或不完整结果:
核心错误点
- 列表重复初始化:
transactions = []写在for循环内部,每次循环都会重新创建空列表,之前添加的对象会被直接丢弃。 - 提前返回结果:
return transactions放在循环内部,第一次循环执行后就直接终止函数并返回,无法遍历所有行;如果DataFrame仅有1行数据,循环根本不会执行,函数无返回值(默认返回None)。
修复后的完整代码
class Transaction: def __init__(self, date, description, amount, category): self.date = date self.description = description self.amount = amount self.category = category def objectify(df): transactions = [] # 将列表初始化移至循环外部 # 若你的DataFrame第一行是有效数据,需改为range(len(df.index)) for i in range(1, len(df.index)): dt = str(df.iloc[(i, 0)]) descr = str(df.iloc[(i, 1)]) amnt = float(df.iloc[(i, 2)]) cat = str(df.iloc[(i, 10)]) transactions.append(Transaction(dt, descr, amnt, cat)) return transactions # 遍历完成后统一返回列表
优化建议(可选)
使用iterrows()遍历DataFrame,代码可读性更高,无需手动处理索引:
def objectify(df): transactions = [] # 从第二行开始遍历(跳过索引为0的行) for idx, row in df.iloc[1:].iterrows(): dt = str(row[0]) descr = str(row[1]) amnt = float(row[2]) cat = str(row[10]) transactions.append(Transaction(dt, descr, amnt, cat)) return transactions
内容的提问来源于stack exchange,提问作者Jacob Canby
相关产品推荐
相关产品推荐

