Python使用pandas读取多份CSV文件合并为单个DataFrame问题求解
解决方案
核心问题原因
你当前的错误是混用了Python列表的append()方法和pandas DataFrame的合并逻辑:
- 全局变量
data_arr被你初始化为普通空列表,每次调用append()会把读取到的整个DataFrame作为一个独立元素塞到列表里,最终就会出现你看到的「列表嵌套多个DataFrame」的结果,而非行维度的合并。 - 同时你调用
GetData函数时传参顺序和定义不符,参数错位也可能导致后续逻辑异常。
修复步骤
- 调整全局变量的初始化类型,直接用空DataFrame存储合并后的所有数据,不需要用列表包裹:
import pandas as pd # 全局初始化为空DataFrame,而非空列表 global data_arr data_arr = pd.DataFrame()
- 修改
upload_file函数的合并逻辑,用pd.concat()做纵向行合并:
def upload_file(root, self): global data_arr # 修正传参顺序,对应GetData定义的参数顺序:root、self、data_dictionary、data_arr # 未使用的data_dictionary参数传空字典占位即可 new_df = GetData(root, self, {}, data_arr) # 规避用户未选文件返回None的异常 if new_df is not None: # ignore_index=True会重置合并后的行索引,避免多个文件的索引重复 data_arr = pd.concat([data_arr, new_df], ignore_index=True) print(data_arr)
- 如果你的业务场景确实需要符合示例里「外层套列表」的输出格式,合并后手动套一层即可:
output_list = [data_arr]
后续导出操作
你需要将合并后的数据存为CSV时,直接调用pandas自带的方法即可:
# index=False表示不导出pandas自动生成的行索引 data_arr.to_csv("合并结果.csv", index=False, encoding="utf-8-sig")
内容的提问来源于stack exchange,提问作者bob_jones
相关产品推荐
相关产品推荐

