如何将局部变量传递给熊猫中的用户定义函数?

Posted

技术标签:

【中文标题】如何将局部变量传递给熊猫中的用户定义函数?【英文标题】:How to pass a local variable to a user-defined function in pandas? 【发布时间】:2016-12-13 08:59:29 【问题描述】:

我正在处理一个熊猫数据框df。根据df 中的某些条件,我想将df (1) 传递给用户定义的函数filter() 或(2) 传递给calculate_Result()

条件代码为:

if df.Col1.str.contains("yes").sum() > 0:
    df = filter_df
    filter() # Loop
else:
    df = calculate_df
    calculate_result() # End 

但是,我产生了UnboundLocalError: local variable referenced before assignment.

当我将 df = calculate_dfdf = filter_df 赋值放入函数定义本身时,我也不断收到此错误:

def filter():
    df = filter_df
    ...

def calculate_results():
    df = calculate_df()
    ...

无论我把作业放在哪里,我都会让步UnboundLocalError: local variable referenced before assignment.

如何正确地将局部变量传递给 pandas 中的用户定义函数?

【问题讨论】:

【参考方案1】:

这与将变量传递给函数无关。

您使用名称 df 来指代全局模块 - 在 df.Col1... 中以及作为 filter_df 的结果。这会导致您看到的错误。

为局部变量使用不同的名称。

【讨论】:

我不太确定我是否理解。如果满足 df 中的某些条件,我想重命名它并在函数 def1 中继续使用它。如果不满足条件,我想在函数 def2 中继续使用它。因此,名称 df 在检查条件时必须与 (2) 在函数内相同。我想根据数据帧中的条件将相同的数据帧传递给不同的函数。 没有。这没有任何意义,并且与您发布的代码或您遇到的问题无关。在一个函数中“重命名”一个变量完全没有与你如何将它传递给另一个函数有关。您应该发布足够的代码,以便我们可以看到您实际在做什么。

以上是关于如何将局部变量传递给熊猫中的用户定义函数?的主要内容,如果未能解决你的问题,请参考以下文章

将指向局部变量的指针传递给函数:它安全吗?

问题将模板类型传递给函数并用于局部变量赋值 c++

将局部变量传递给 create.js.erb 以进行迭代中的迭代

Rails 6 - 传递给部分时未定义的局部变量,但当我将调试器放入 erb 文件时定义了它

如何将局部变量传递给 Invoke-Command -ScriptBlock

将局部变量传递给嵌套的局部变量