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

Python 循环中如何通过字符串名称获取对应DataFrame执行计算

报错核心原因

你目前拼接得到的dfa/dfb/dfc只是普通字符串,不是对应名称的DataFrame对象,直接对字符串做列索引操作会直接抛出KeyError,根本无法完成计算。要实现“通过和DataFrame完全同名的字符串匹配对应对象”,可以用以下两种适配Python 3.8.5新手的实现方案:

方案1:利用内置作用域字典直接映射

Python运行时会把当前环境下定义的所有变量,存在内置的全局/局部变量字典中,刚好可以实现字符串到对象的映射:

  • 如果你的所有df1_xx/df2_xx/df3_xx类型的DataFrame是在全局环境直接定义的,就用globals()返回的字典做映射——这个字典的键就是变量名的字符串,值就是对应的实际对象,完全匹配你的使用场景。
  • 修改后的可运行代码:
dfsteps = ['0','1','10','20','30','40','50','60','70','80','90','100']
# 提前获取全局变量字典,避免循环内反复调用增加开销
global_env = globals()
# 准备空字典存储每轮的计算结果,避免循环变量被下一轮覆盖
max_result = {}

for steps in dfsteps:
    # 从全局变量字典中取出对应名称的DataFrame
    dfa = global_env['df1_' + steps]
    dfb = global_env['df2_' + steps]
    dfc = global_env['df3_' + steps]
     
    A1 = dfa['Values1']
    A2 = dfb['Values2']
    A3 = dfc['Values3']
    
    A1max = A1.max()
    A2max = A2.max()
    A3max = A3.max()
    # 存储当前steps对应的三个最大值
    max_result[steps] = (A1max, A2max, A3max)
  • 注意:如果你的DataFrame是在函数内部定义的局部变量,只要把代码里的globals()替换成locals()即可,用法完全一致。
方案2:提前手动建立映射字典(更推荐)

这种写法比依赖作用域字典更可控,不会因为变量名拼错、作用域错位出现找不到对象的问题,稳定性更高,适合后续维护:

  • 在所有DataFrame定义完成后,直接手动建立“名称字符串- DataFrame对象”的映射关系:
# 提前定义映射字典,键就是循环时用到的steps值,值是对应三个DataFrame的元组
df_map = {
    '0': (df1_0, df2_0, df3_0),
    '1': (df1_1, df2_1, df3_1),
    '10': (df1_10, df2_10, df3_10),
    # 后续按照格式补全剩下的20/30...100对应的条目即可
}
  • 循环时直接从这个字典里取值运算即可,代码更简洁,出错概率更低。
新手避坑提示
  • 不要用eval()实现字符串转对象的操作,比如写eval('df1_' + steps),虽然能跑通,但一旦拼接的字符串存在语法错误,会直接执行对应代码,排查问题难度很高,不推荐使用。
  • 不要直接用同名变量存储每轮的最大值,不然循环跑完只会保留最后一个steps对应的计算结果,记得用独立的字典或列表存好每轮的计算结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 17:45:01