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

如何循环处理多个pandas DataFrame?解决NameError未定义变量问题

问题分析与解决方案

我来帮你拆解下代码里的问题,以及怎么修改才能实现你的需求:

核心错误原因

  1. 循环变量未关联全局变量:你循环里的i一开始是字符串(比如'a'),后来把它赋值成DataFrame,但这只是改变了循环变量i的值,并没有在全局环境里创建名为a、b的变量,所以最后调用a.info()时会报NameError。
  2. 文件名拼接错误:i + 'csv'会生成类似acsv的错误文件名,应该是i + '.csv'才对;同理新文件名建议写成i + '_new.csv',避免出现anew.csv这种不清晰的命名。
  3. 多余的代码行:i = pd.DataFrame()完全没必要,因为下一行pd.read_csv会直接覆盖这个空DataFrame。
  4. 内置类型被覆盖:用list作为变量名会覆盖Python的内置list类型,这是不好的编程习惯,建议换成df_names这类有意义的名字。

推荐解决方案(用字典管理DataFrame,更规范)

这种方式不会污染全局变量,还能统一管理所有DataFrame,后续操作更方便:

import pandas as pd

# 定义要处理的DataFrame名称列表,避免用list做变量名
df_names = ['a', 'b', 'c', 'd', 'e']
# 用字典存储所有DataFrame,方便后续访问
dfs = {}

for name in df_names:
    # 正确读取对应csv文件
    current_df = pd.read_csv(f"{name}.csv")
    # 计算sum列
    current_df['sum'] = current_df['Z'] + current_df['Y']
    # 保存处理后的文件,index=False避免保存默认索引列
    current_df.to_csv(f"{name}_new.csv", index=False)
    # 将DataFrame存入字典,后续可以通过dfs['a']访问
    dfs[name] = current_df

# 现在可以查看a的信息了
dfs['a'].info()

如果你一定要创建全局变量a、b、c...(不推荐,易维护性差)

如果坚持要直接用a、b这类变量名,可以通过globals()动态创建全局变量:

import pandas as pd

df_names = ['a', 'b', 'c', 'd', 'e']

for name in df_names:
    current_df = pd.read_csv(f"{name}.csv")
    current_df['sum'] = current_df['Z'] + current_df['Y']
    current_df.to_csv(f"{name}_new.csv", index=False)
    # 动态创建全局变量,比如把current_df赋值给名为a的变量
    globals()[name] = current_df

# 现在可以直接调用a.info()了
a.info()

额外注意事项

  • 确保你的.csv文件和脚本在同一个目录下,或者使用完整文件路径(比如pd.read_csv(r"C:\data\a.csv"))
  • 检查csv文件中确实存在Z和Y列,否则会触发KeyError
  • 保存文件时加上index=False可以避免把Pandas默认的索引列写入csv,除非你需要保留索引

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 18:22:40