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
相关产品推荐
相关产品推荐

