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

Python嵌套函数中如何将生成的dataframe返回至外部调用处

问题排查及修复方案

1 报错原因

main_df是AppendData函数内部定义的局部变量,作用域仅局限在该函数内部,函数外部无法直接访问这个变量名。
你调用外层函数ConsolidateData时,符合判断条件的场景下,外层函数会把AppendData返回的main_df作为自身的返回值,你需要用一个变量接收这个返回值,才能拿到合并后的数据集,直接调用函数后打印main_df自然会报未定义错误。

错误调用示例:

ConsolidateData()
print(main_df) # 这里main_df没有在全局定义,所以报错

正确调用示例:

result = ConsolidateData()
print(result) # 用变量接收返回值后即可正常访问

2 隐藏的代码逻辑问题

你当前的AppendData写法无法完成多文件合并:pandas的append方法不会修改原DataFrame,会返回新的合并后对象,你写的main_df.append(df)没有把结果赋值回变量,运行后main_df始终只有第一个文件的数据,需要修改写法。
更推荐用pd.concat完成列表数据集合并,效率更高也更易读。

3 修正后完整代码

import pandas as pd

# 提前定义你的数据集文件名列表,可后续新增其他列表
PI_data = ["采购发票1.xlsx", "采购发票2.xlsx", "采购发票3.xlsx"]

def ConsolidateData():
    def AppendData(dataList):
        # 批量读取所有文件后合并
        df_list = [pd.read_excel(file) for file in dataList]
        # ignore_index=True用来重置合并后的行号,避免行号重复
        main_df = pd.concat(df_list, ignore_index=True)
        return main_df

    consolInput = input('请输入你想要合并的数据集类型:')
    if '采购发票' in consolInput:
        return AppendData(PI_data)
    # 后续可以在这里新增其他判断分支,对应其他数据集列表
    else:
        print("未找到匹配的数据集")
        return None

# 调用函数并接收返回结果
merged_data = ConsolidateData()
if merged_data is not None:
    print(merged_data)
    # 后续可以在这里加导出合并结果的逻辑,比如 merged_data.to_excel("合并结果.xlsx")

4 补充说明

就算把AppendData移到外层函数之外定义,逻辑也是一致的:必须接收函数返回的结果,才能拿到内部生成的DataFrame,局部变量默认无法在函数外部直接访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:09:00