You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

函数返回空列表: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 06:12:42