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

Python函数引用局部变量报UnboundLocalError 如何拼接两个DataFrame

问题解决方法

错误原因

  • df1是你第一次调用Concat函数时定义的局部变量,函数执行完毕后局部变量会被销毁,第二次传入x≠1调用函数时,当前函数作用域内完全没有定义过df1,直接调用自然会触发UnboundLocalError报错
  • 原有逻辑没有存储中间生成的df1,跨函数调用无法共享变量

实现方案

方案1:调整逻辑在主函数层管理变量(推荐,无副作用逻辑更清晰)

将读取数据和拼接逻辑拆分,函数仅负责返回读取的DataFrame,在主函数中完成拼接:

import pandas as pd

def read_df(url):
    return pd.read_json(url)

def main():
    # 读取对应url的两个DataFrame
    df1 = read_df("你的第一个url")
    df2 = read_df("你的第二个url")
    # 完成拼接
    df3 = pd.concat([df1, df2], ignore_index=True)
    # 后续可对df3做其他处理
    print(df3)

if __name__ == "__main__":
    main()

方案2:保留原有x入参判断逻辑,用类存储中间变量

如果你必须保留传入x判断执行逻辑的写法,可以用类属性存储第一次生成的df1,实现跨调用共享:

import pandas as pd

class ConcatHandler:
    def __init__(self):
        self.df1 = None
    
    def run(self, url, x):
        if x == 1:
            self.df1 = pd.read_json(url)
        else:
            if self.df1 is None:
                raise ValueError("请先传入x=1完成df1读取后再执行拼接")
            df2 = pd.read_json(url)
            df3 = pd.concat([self.df1, df2], ignore_index=True)
            return df3

def main():
    handler = ConcatHandler()
    handler.run("你的第一个url", 1)
    df3 = handler.run("你的第二个url", 2)
    print(df3)

if __name__ == "__main__":
    main()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 20:57:04