Python pandas循环拼接多个.csv文件仅返回最后一个文件的问题排查
问题成因
pd.concat的作用是接收包含多个DataFrame的序列,一次性完成拼接。你编写的逻辑存在根本性错误:每次遍历仅将当前单个DataFrame传入pd.concat,同时会覆盖上一轮生成的list_stacked变量,循环执行到最后一步时仅拼接了list3,自然最终结果只有list3的内容- 原代码还存在缩进错误,for循环下的执行语句没有正确缩进,实际运行时循环本身就不会生效
修正方案
直接把包含所有DataFrame的列表传入pd.concat即可,不需要额外遍历循环:
import pandas as pd # 读取三个csv文件 list1 = pd.read_csv('C:/Users/PC/list1.csv') list2 = pd.read_csv('C:/Users/PC/list2.csv') list3 = pd.read_csv('C:/Users/PC/list3.csv') # 直接对所有DataFrame完成纵向拼接,axis=0表示纵向拼接,为默认参数可省略 list_stacked = pd.concat([list1, list2, list3], axis=0) # 如果需要导出拼接后的结果为csv,可执行下方语句,index=False表示不导出pandas自动生成的行索引 list_stacked.to_csv('C:/Users/PC/stacked_result.csv', index=False)
如果后续要拼接的csv数量很多,可以用批量读取逻辑,不用逐个定义变量:
import pandas as pd import os # 存放所有csv的文件夹路径 file_dir = 'C:/Users/PC/' # 筛选出所有符合要求的csv文件,可根据自己的命名规则调整筛选条件 csv_files = [f for f in os.listdir(file_dir) if f.startswith('list') and f.endswith('.csv')] # 批量读取并拼接 df_list = [] for file in csv_files: df = pd.read_csv(os.path.join(file_dir, file)) df_list.append(df) list_stacked = pd.concat(df_list, axis=0)
内容的提问来源于stack exchange,提问作者Bradley
相关产品推荐
相关产品推荐

