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

Python循环批量合并CSV文件遇EmptyDataError问题求助

问题描述

有数百个CSV文件需要用Python合并格式化,处理单个文件时逻辑可行:读取文件后指定列名为“Parasites”和文件名,将“Parasites”设为索引,通过外连接合并两个文件后,得到以“Parasites”为索引、各文件第二列为列的结果。但批量循环处理时,运行以下代码持续触发EmptyDataError: No columns to parse from file错误,所有文件均为两列结构(第一列名称、第二列数值):

import os
import glob
import pandas as pd

fmask = '/Users/path/to/files/species/*csv'

 dfs = []
 for f in glob.glob(fmask):
     df = pd.read_csv(f, sep=',')
     df.columns=["Parasites",f]
       df2=df.set_index('Parasites')
     df3=pd.merge(
     dfs, df2, how="outer", on =["Parasites"])

错误原因分析

  • 缩进语法错误:代码中dfs = []、df2=df.set_index('Parasites')的缩进不符合Python规范,会导致变量作用域错误或语法解析失败,进而引发数据处理异常。
  • 合并逻辑错误:初始dfs是空列表,直接调用pd.merge(dfs, df2)完全不符合API要求——pd.merge的参数必须是DataFrame对象,而非列表。正确的批量合并逻辑应该是先收集所有处理好的DataFrame,再统一合并。
  • CSV读取参数缺失:如果你的CSV文件没有表头行,调用pd.read_csv(f, sep=',')会默认把第一行数据当成列名,导致后续设置列名时覆盖错误,甚至出现列数不匹配的空数据情况。

修正后的代码

import os
import glob
import pandas as pd

fmask = '/Users/path/to/files/species/*csv'
processed_dfs = []

for f in glob.glob(fmask):
    # 读取无表头的CSV,指定header=None避免把第一行当列名
    df = pd.read_csv(f, sep=',', header=None)
    # 重命名列,用文件名作为第二列的列名(用basename避免路径过长)
    df.columns = ["Parasites", os.path.basename(f)]
    # 设置索引
    df_indexed = df.set_index('Parasites')
    # 将处理好的DataFrame加入列表
    processed_dfs.append(df_indexed)

# 用concat批量外连接合并所有DataFrame,axis=1表示按列合并
final_df = pd.concat(processed_dfs, axis=1, join='outer')
# 可选:填充空值为0或其他自定义值
final_df = final_df.fillna(0)

补充说明

如果部分CSV文件确实存在空文件(虽你说明所有文件都是两列),可以在读取时增加异常捕获跳过:

for f in glob.glob(fmask):
    try:
        df = pd.read_csv(f, sep=',', header=None)
        df.columns = ["Parasites", os.path.basename(f)]
        df_indexed = df.set_index('Parasites')
        processed_dfs.append(df_indexed)
    except pd.errors.EmptyDataError:
        print(f"跳过空文件: {f}")
        continue

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 02:55:23