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

批量读取年份命名CSV遇ParserError,求合并为DataFrame解决方案

解决CSV解析错误并合并多文件方案

错误说明

你遇到的错误翻译为:

解析错误:第4行预期1个字段,但发现2个

这表明目标CSV文件存在格式不一致的行——pandas根据文件前几行推断出只有1列,但第4行突然出现了2个逗号分隔的字段,导致解析失败。即使指定了分隔符,格式不匹配的行仍会触发报错。

分步修复与实现

1. 定位异常文件与行

先修改代码,加入错误捕获,精准定位出问题的文件和具体行内容:

import os
import pandas as pd

df_dict = {}
# 替换为你的文件夹路径,注意不要留多余空格
target_folder = "你的文件夹实际路径"

for dirname, _, filenames in os.walk(target_folder):
    for filename in filenames:
        # 只处理CSV文件,过滤其他格式文件
        if not filename.lower().endswith(".csv"):
            continue
        full_path = os.path.join(dirname, filename)
        print(f"正在处理: {full_path}")
        try:
            # 指定分隔符、表头行,确保解析逻辑明确
            df = pd.read_csv(full_path, sep=",", header=0, engine="python", encoding="utf-8")
            # 添加年份列,从文件名提取(假设文件名是纯年份,比如2023.csv)
            df["Year"] = filename[:-4]
            df_dict[filename[:-4]] = df
        except Exception as e:
            print(f"文件 {filename} 解析失败: {str(e)}")
            # 打印异常行内容,方便排查
            with open(full_path, "r", encoding="utf-8") as f:
                lines = f.readlines()
                if len(lines) >= 4:
                    print(f"第4行内容: {lines[3].strip()}")

2. 修复CSV格式问题

根据定位出的异常行,常见问题及解决办法:

  • 未转义的逗号:单元格内容包含逗号但未用双引号包裹(比如北京,朝阳区会被解析成2列),需修改为"北京,朝阳区";
  • 表头与数据列数不匹配:检查表头行的列数,修正对应数据行的字段数量;
  • 空行/乱码行:直接删除这些无效行。

3. 验证列名一致性

即使列数相同,也要确保所有文件的列名完全一致,否则合并时会出现列错位。可在读取后添加列名打印:

print(f"{filename} 列名: {df.columns.tolist()}")

4. 合并所有DataFrame

所有文件成功读取后,用pd.concat()合并为完整数据集:

# 提取字典中所有DataFrame对象
all_dataframes = list(df_dict.values())
# 合并并重置索引
merged_df = pd.concat(all_dataframes, ignore_index=True)
# 保存合并结果(可选)
merged_df.to_csv("合并后总数据.csv", index=False, encoding="utf-8-sig")

优化提示

  • 文件夹路径避免空格或特殊字符,防止路径解析错误;
  • 根据文件实际编码指定encoding参数(比如GBK编码文件用encoding="gbk");
  • 若已知固定列名,可通过usecols参数指定读取列,避免意外新增列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 03:45:42