使用pandas concat合并CSV文件触发TypeError报错如何解决
报错核心原因
pd.concat()的第一个入参必须传入可迭代的pandas对象集合(比如由多个DataFrame组成的列表),你在循环中每次只传入了单个df1 DataFrame对象,直接触发类型报错。
除此之外你的代码还有三个隐藏逻辑问题:
- 非csv文件的判断逻辑缩进错误:如果遍历到的文件不是csv格式,
df1变量不会被定义,后续代码会直接报「变量不存在」的错误 - 循环内每次执行concat都会用新读入的文件覆盖之前的
df结果,根本没有实现多文件累加拼接的效果,运行完只会保留最后一个读入的csv文件内容 - 直接用字符串拼接路径容易出现斜杠缺失/冗余的问题,稳定性差
修正后的实现代码
import pandas as pd import os input_file_path = "C:/Users/laura/Downloads/excel files/" output_file_path = "C:/Users/laura/OneDrive/Desktop/master excel/" excel_file_list = os.listdir(input_file_path) # 初始化空列表,存放所有读入的DataFrame df_list = [] for excel_file in excel_file_list: # 只处理csv格式文件,用os.path.join拼接路径更稳定 if excel_file.endswith('.csv'): file_full_path = os.path.join(input_file_path, excel_file) temp_df = pd.read_csv(file_full_path) df_list.append(temp_df) # 一次性拼接所有DataFrame # axis=1 是横向按列拼接(各文件作为新列并排拼接) # 如果需要纵向按行拼接(同结构文件上下堆叠行),把axis=1改成axis=0即可 final_df = pd.concat(df_list, axis=1, ignore_index=True) # 后续如果要导出结果可以加下面这行 # final_df.to_csv(os.path.join(output_file_path, "合并结果.csv"), index=False)
参数说明
- 如果你需要的是多个同结构csv上下堆叠、合并所有行的效果,把concat的参数改成
axis=0即可,这也是绝大多数批量合并同格式csv文件的常用场景,比旧版pandas的append方法运行效率更高 - 如果你确实需要把每个csv作为独立列横向并排拼接,保留代码里的
axis=1即可,拼接前建议确认各文件的行顺序是匹配的,避免数据错位
内容的提问来源于stack exchange,提问作者Laura
相关产品推荐
相关产品推荐

