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

批量处理CSV合并指定列时遇UTF-8解码错误,求解决方法

解决CSV文件读取时的UTF-8解码错误及合并列的完整方案

嗨,我来帮你搞定这个问题!你遇到的'utf-8' codec can't decode byte 0xa9错误,本质上是因为要读取的CSV文件并不是用UTF-8编码保存的,咱们一步步来解决:

一、先搞定编码错误问题

这个错误里的0xa9是版权符号©的ISO-8859-1编码,说明文件用了UTF-8以外的编码格式,这里给你两种解决思路:

1. 尝试常见编码直接读取

直接给pd.read_csv()指定其他常用编码,比如:

  • 中文系统里常见的GBK编码:pd.read_csv(file_path, encoding='gbk')
  • 兼容更多西文字符的ISO-8859-1编码:pd.read_csv(file_path, encoding='ISO-8859-1')
  • Windows下保存的带BOM的UTF-8文件:pd.read_csv(file_path, encoding='utf-8-sig')

2. 自动检测文件编码(更稳妥)

如果你不确定文件编码,可以用chardet库自动检测:
注意:先通过pip install chardet安装这个库

import chardet

with open("你的CSV文件路径", 'rb') as f:
    result = chardet.detect(f.read())
print(result['encoding'])  # 输出检测到的编码,比如'GB2312'、'ISO-8859-1'等

拿到编码后,把它传入pd.read_csv()即可。

二、完整的遍历CSV+合并列代码

结合你的需求,这里给出修改后的完整代码,既解决了编码问题,又实现了按索引遍历、合并指定列、保存新文件的功能:

import os
import pandas as pd
import chardet

# 配置参数,记得替换成你的实际路径和表头
input_dir = "你的原CSV文件夹路径"
output_dir = "你的新文件保存路径"
columns_to_merge = ["wellkey", "drillkey"]  # 替换成你要合并的指定表头
new_column_name = "合并后的新列名"

# 自动创建输出文件夹(不存在则创建)
os.makedirs(output_dir, exist_ok=True)

# 按索引循环遍历所有CSV文件
for idx, filename in enumerate(os.listdir(input_dir)):
    if filename.endswith(".csv"):
        file_path = os.path.join(input_dir, filename)
        print(f"正在处理第{idx+1}个文件:{filename}")
        
        # 自动检测文件编码并读取
        with open(file_path, 'rb') as f:
            encode_info = chardet.detect(f.read())
        df = pd.read_csv(file_path, encoding=encode_info['encoding'])
        
        # 合并指定列(这里用空格连接,可改成'-'/'_'等分隔符)
        df[new_column_name] = df[columns_to_merge].apply(lambda x: ' '.join(x.astype(str)), axis=1)
        
        # 保存处理后的文件,用UTF-8编码避免后续乱码
        output_path = os.path.join(output_dir, f"processed_{filename}")
        df.to_csv(output_path, index=False, encoding='utf-8')
        print(f"处理完成,已保存至:{output_path}")

三、代码关键点说明

  • 用enumerate实现按索引循环遍历文件,满足你的需求
  • 合并列用apply+lambda,把指定列内容转成字符串后拼接,你可以根据需要修改分隔符
  • 保存时指定encoding='utf-8',确保新文件是通用编码,避免后续再出现编码问题
  • os.makedirs(output_dir, exist_ok=True)会自动创建输出文件夹,已存在也不会报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:09:18