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

使用df.loc创建多命名子DataFrame遇NameError:'red'未定义(Python3.6)

解决销售团队子DataFrame的NameError问题

嘿,我明白你遇到的问题了——想给每个销售团队单独生成子DataFrame,但调用red的时候却提示变量未定义。这大概率是因为你尝试动态创建变量的方式在Python 3.6的作用域里没生效,或者这种做法本身就不太可靠。下面给你讲最稳妥的解决办法:

别直接动态创建变量,用字典存才靠谱

直接用locals()或者globals()生成变量的方式很容易踩坑,比如作用域限制、命名冲突,就是你现在遇到的NameError情况。更好的方式是用一个字典来统一管理所有团队的子DataFrame,既安全又方便。

步骤1:准备你的原始DataFrame(先假设你的数据结构是这样)

import pandas as pd

# 模拟你的业务数据
data = {
    'product_id': ['P001', 'P002', 'P003', 'P004', 'P005'],
    '产品销售地点': ['华北区', '华东区', '华北区', '华南区', '华东区'],
    '负责销售团队': ['red', 'blue', 'red', 'green', 'blue']
}
df = pd.DataFrame(data)

步骤2:用字典存储各团队的子DataFrame

# 创建空字典用来存子DataFrame
team_sub_dfs = {}

# 遍历所有唯一的销售团队
for team_name in df['负责销售团队'].unique():
    # 筛选当前团队的所有数据,存入字典
    team_sub_dfs[team_name] = df[df['负责销售团队'] == team_name]

步骤3:访问子DataFrame

现在你只需要通过字典的键来调用对应的子DataFrame就行,完全不会有变量未定义的问题:

# 查看red团队的子DataFrame
print(team_sub_dfs['red'])

更简洁的写法:用groupby一步到位

如果你觉得循环麻烦,pandas的groupby方法可以帮你一键完成分组,代码更简洁:

# 直接把分组结果转成字典
team_sub_dfs = dict(list(df.groupby('负责销售团队')))

效果和上面的循环完全一样,但一行代码就搞定了。

为什么之前的方法会出错?

如果你之前尝试过类似下面的代码:

for team_name in df['负责销售团队'].unique():
    locals()[team_name] = df[df['负责销售团队'] == team_name]

在Python 3.6里,这种方式在脚本顶层或者函数内部都可能无法正确将变量绑定到当前作用域,导致你后续调用red时找不到这个变量。而字典存储的方式不受作用域限制,是行业内推荐的标准做法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:26:15