在独立模块调用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
相关产品推荐
相关产品推荐

