【问题标题】:Referencing local variable within the same function在同一函数中引用局部变量
【发布时间】:2021-08-23 01:33:07
【问题描述】:

我想使用一个函数合并 2 个 DataFrame。 该函数在使用变量“x = 1”调用时创建 DataFrame df1,然后在使用“x!= 1”调用时创建另一个 df2,基于函数中的 if 语句 - 为进一步清楚起见,下面的代码 sn-p。

到达“df3 = pd.concat”行时,我收到错误“UnboundLocalError: local variable 'df1' referenced before assignment”。

我想了解如何实现将df1和df2连接成df3的结果。

def Concat(url, x):
    if x == 1:
        df1 = pd.read_json(url)
    else:
        df2 = pd.read_json(url)
        df3 = pd.concat([df1, df2], ignore_index=True)


def main():
    Concat('*url*', 1)
    Concat('*url*', 2)

【问题讨论】:

  • else 块中,你永远不会定义df1,所以你会得到UnboundLocalError
  • both df1 and df2 are generated 这就是你错的地方。您有生成两者的代码,但它永远不会一起运行。

标签: python-3.x local-variables


【解决方案1】:

你应该稍微调整一下,变成:

def Concat(url, x):
    for i in x:
        if i == 1:
            df1 = pd.read_json(url)
        else:
            df2 = pd.read_json(url)
            df3 = pd.concat([df1, df2], ignore_index=True)


def main():
    Concat('*url*', [1, 2])

【讨论】:

  • 评论和回答很有意义 - 我明白为什么我会收到错误消息。只是为了确保我理解答案,Concat 是否从 main() 运行两次,一次使用 x=1,一次使用 x=2?
  • @FlybatRamirez 不,现在没有,它运行一次
  • 啊,我明白了,你传递了一个列表——我没想到会这样做。相当优雅。
  • 我已经测试了您的代码,但是我仍然收到相同的错误 =“UnboundLocalError: local variable 'df1' referenced before assignment”。事实证明 df1 根本没有被创建,所以 x ==1 由于某种原因永远不会是 True 。
  • @FlybatRamirez 好吧,这可能是您没有向我们展示的其他代码的问题,不是我的代码...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多