遍历多个DataFrame并应用自定义函数后未生效的问题求助
问题原因及解决方法
问题根源
你循环里的df = VDS_pre(df)只是把处理后的DataFrame赋值给了循环临时变量,并没有更新列表里的元素,更不会修改最初的vds、vds2等变量:
- pandas的
groupby、rename、列筛选操作都会返回新的DataFrame对象,而非原地修改原对象; - 循环中的
df是列表元素的临时引用,重新赋值后只会让这个临时变量指向新对象,原列表和初始变量不会受到影响。
解决方法
方法1:用列表推导式生成处理后的新列表
这种写法简洁高效,直接得到所有处理后的DataFrame:
# 生成处理后的DataFrame列表 dfs_processed = [VDS_pre(df) for df in dfs] # 可选:如果需要更新原变量vds、vds2等 vds, vds2, vds3, vds4 = dfs_processed
方法2:通过索引循环更新原列表
如果要直接修改原列表的元素,可以用索引遍历:
for i in range(len(dfs)): dfs[i] = VDS_pre(dfs[i]) # 此时dfs里的每个元素都是处理后的结果 # 同样可选:更新原变量 vds, vds2, vds3, vds4 = dfs
验证处理结果
可以打印处理后的DataFrame确认:
for idx, df in enumerate(dfs_processed): print(f"处理后的第{idx+1}个DataFrame:") print(df.head())
内容的提问来源于stack exchange,提问作者Oscy
相关产品推荐
相关产品推荐

