Pandas自定义函数遍历DataFrame索引仅输出最后一个元素问题
问题根因
遍历Pandas DataFrame仅拿到最后一条元素,通常由三个问题导致:
- Python语法缩进错误:你贴出的代码中
for循环没有缩进在def recarga()函数块内,函数本身无法正确执行循环逻辑; - 结果存储逻辑错误:如果需要收集遍历结果供后续SOAP请求使用,循环内反复对单个变量赋值会覆盖上一轮的结果,循环结束后自然仅保留最后一条记录;
- 遍历写法不规范:使用链式索引
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
相关产品推荐
相关产品推荐

