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

Pandas自定义函数遍历DataFrame索引仅输出最后一个元素问题

问题根因

遍历Pandas DataFrame仅拿到最后一条元素,通常由三个问题导致:

  1. Python语法缩进错误:你贴出的代码中for循环没有缩进在def recarga()函数块内,函数本身无法正确执行循环逻辑;
  2. 结果存储逻辑错误:如果需要收集遍历结果供后续SOAP请求使用,循环内反复对单个变量赋值会覆盖上一轮的结果,循环结束后自然仅保留最后一条记录;
  3. 遍历写法不规范:使用链式索引trx['列名'][i]在部分DataFrame视图场景下会出现取值异常。
可直接复用的修复代码

逐行调试打印场景

优先使用pandas官方推荐的iterrows()方法遍历行,严格遵循Python缩进规则,修正后可逐行打印所有记录:

import pandas as pd

# 把DataFrame作为参数传入函数,避免依赖全局变量
def recarga(trx: pd.DataFrame):
    # 函数体缩进4空格,循环体在函数内再缩进4空格
    for _, row in trx.iterrows():
        importe_val = row['Importe']
        numero_val = row['Numero cliente']
        print(f"importe: {importe_val}, numero: {numero_val}")

# 调用时传入你的交易DataFrame即可逐行打印
# recarga(trx)

收集全量结果供SOAP请求调用场景

提前初始化列表存储每轮循环的结果,循环过程中把单条记录追加到列表中,注意return语句要写在循环外部,避免提前终止函数:

import pandas as pd

def recarga(trx: pd.DataFrame):
    # 初始化结果存储列表
    all_records = []
    for _, row in trx.iterrows():
        # 这里替换成你构造SOAP请求体的实际逻辑
        single_req = {
            "importe": row['Importe'],
            "numero_cliente": row['Numero cliente']
        }
        all_records.append(single_req)
        # 可保留调试打印
        print(f"已加载记录:importe={single_req['importe']}, numero={single_req['numero_cliente']}")
    # 循环全部完成后返回全量结果
    return all_records

# 调用示例
# trx_data = recarga(trx)
# 后续遍历trx_data逐个发起SOAP请求即可

避坑提醒:不要把return语句写在for循环的缩进块内,否则函数执行第一轮循环就会终止,仅返回第一条记录;也不要在循环内用同一个变量反复存储单条结果不做追加,否则最终只会保留最后一轮循环的赋值。

内容的提问来源于stack exchange,提问作者Lucas Peck

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 11:00:59