合并多CSV文件至Excel时遇Error tokenizing data问题求助
解决合并CSV时的Error tokenizing data问题
问题核心原因
- 字段数不匹配:CSV文件中部分数据行的字段数量与表头不一致(如示例中表头为16列,部分行有20列),触发pandas的字段校验错误。
- 分隔符错误:代码默认使用逗号作为分隔符,但实际数据是空白(多空格/制表符)分隔,导致读取逻辑混乱,进一步加剧字段数匹配问题。
- 废弃参数无效:
error_bad_lines=False是pandas旧版本参数,新版本已被on_bad_lines替代,因此该设置未生效。
解决方案
1. 关键参数修正
- 指定正确分隔符:用
sep='\s+'匹配任意空白字符(适配多空格/制表符场景),或明确用sep='\t'(若确认是纯制表符分隔)。 - 替换兼容参数:用
on_bad_lines='skip'直接跳过字段不匹配的行,或on_bad_lines='warn'仅提示不中断流程。 - 明确表头与编码:指定
header=0确保第一行为表头,优先尝试utf-8或gbk编码(中文环境更通用)。
2. 修改后的完整代码
import pandas as pd import os # 目标文件夹路径 folder_path = r'C:\Users\Documents\Test' csv_files = [f for f in os.listdir(folder_path) if f.endswith('.csv')] df_list = [] for csv in csv_files: file_path = os.path.join(folder_path, csv) try: # 基础读取配置:空白分隔、跳过错误行、UTF-8编码 df = pd.read_csv( file_path, sep='\s+', header=0, on_bad_lines='skip', encoding='utf-8' ) df_list.append(df) except UnicodeDecodeError: try: # UTF-8失败时尝试GBK编码(适配中文文件) df = pd.read_csv( file_path, sep='\s+', header=0, on_bad_lines='skip', encoding='gbk' ) df_list.append(df) except Exception as e: print(f"无法读取文件 {csv},错误:{e}") except Exception as e: print(f"无法读取文件 {csv},错误:{e}") # 合并数据并保存为Excel if df_list: big_df = pd.concat(df_list, ignore_index=True) # 保存为Excel需先安装openpyxl:pip install openpyxl big_df.to_excel(os.path.join(folder_path, 'combined_file.xlsx'), index=False) print("合并完成,结果已保存为combined_file.xlsx") else: print("未成功读取任何CSV文件")
3. 额外处理建议
- 若需保留字段不匹配的行,可自定义所有可能的列名(如
names=[f'Col{i}' for i in range(20)]),但多余列会填充空值。 - 若不确定文件编码,可使用
chardet库检测:安装后执行chardet.detect(open(file_path, 'rb').read())获取编码信息。
内容的提问来源于stack exchange,提问作者noel feng
相关产品推荐
相关产品推荐

