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

在独立模块调用pandas的df.loc函数时遇NameError问题求助

解决NameError: global name 'df' is not defined的问题

这个问题很常见——你的函数现在默认去全局作用域找df,但它只存在于调用函数的那个程序的局部作用域里,所以会报错。解决方法很简单,把df作为参数传递给函数,这样函数就能明确知道要操作哪个DataFrame了。

修改你的复用函数

直接把df加到函数的参数列表里,这样调用时就能传入目标DataFrame:

def research_data_dictionary(df):
    df.loc[df.ProductName == 'Product1', "DescriptorName"] = 'CP AA'
    df.loc[df.ProductName == 'Product2', "DescriptorName"] = 'CP BBB'
    # 可选:返回修改后的df(因为DataFrame是可变对象,修改会直接作用在原对象上,返回只是为了链式调用方便)
    return df

在主程序中调用

在定义好df的程序里,调用时把df传进去就行:

import pandas as pd
from your_module_name import research_data_dictionary  # 替换成你的模块名

# 主程序中定义DataFrame
df = pd.DataFrame({
    'ProductName': ['Product1', 'Product2', 'Product3'],
    'DescriptorName': ['', '', '']
})

# 调用函数,传入df
research_data_dictionary(df)

# 或者用返回值重新赋值(可选,效果和上面一样)
# df = research_data_dictionary(df)

# 查看修改后的结果
print(df)

为什么不推荐用全局变量?

可能有人会想把df设为全局变量,但这会破坏模块化的初衷——你的函数会和特定的全局变量绑定,复用性大打折扣,而且代码可读性和维护性都会变差。传递参数是更清晰、更符合Python最佳实践的方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:32:10