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

使用Python合并CSV文件时遇UTF-8解码错误求助

解决CSV合并时的UTF-8解码错误

你遇到的这个错误核心原因是部分CSV文件并非以UTF-8编码保存,而pd.read_csv()默认使用UTF-8编码读取文件,当遇到其他编码的字节时就会触发解码失败。下面给你几种可行的解决方案:

方案1:尝试指定常见的非UTF-8编码

很多非UTF-8的CSV文件会使用gbk(中文常用)、cp1252(Windows系统常用)或latin-1(兼容所有字节的通用编码),你可以用try-except的方式逐个尝试:

import glob
import pandas as pd

path = r'/content/drive/My Drive/DatiAirQuality/MI_Air_Quality/data'
all_files = glob.glob(path + "/*.csv")
li = []

for filename in all_files:
    # 优先尝试gbk,不行再试cp1252,最后用latin-1兜底
    try:
        df = pd.read_csv(filename, index_col=None, header=0, encoding='gbk')
    except UnicodeDecodeError:
        try:
            df = pd.read_csv(filename, index_col=None, header=0, encoding='cp1252')
        except UnicodeDecodeError:
            # latin-1不会报错,但可能出现乱码,适合先确认文件内容
            df = pd.read_csv(filename, index_col=None, header=0, encoding='latin-1')
    li.append(df)

frame = pd.concat(li, axis=0, ignore_index=True)

方案2:自动检测文件编码(更精准)

可以用chardet库自动检测每个文件的编码,避免手动试错:

  1. 先安装依赖库:
pip install chardet
  1. 修改代码实现自动检测:
import glob
import pandas as pd
import chardet

path = r'/content/drive/My Drive/DatiAirQuality/MI_Air_Quality/data'
all_files = glob.glob(path + "/*.csv")
li = []

for filename in all_files:
    # 读取文件前10KB内容来检测编码
    with open(filename, 'rb') as f:
        detect_result = chardet.detect(f.read(10000))
    # 用检测到的编码读取CSV
    df = pd.read_csv(filename, index_col=None, header=0, encoding=detect_result['encoding'])
    li.append(df)

frame = pd.concat(li, axis=0, ignore_index=True)

方案3:跳过错误行(不推荐,会丢失数据)

如果只是个别行存在编码问题,且这些行的数据无关紧要,可以添加参数跳过错误行:

# 新版pandas用on_bad_lines='skip'
df = pd.read_csv(filename, index_col=None, header=0, on_bad_lines='skip')

# 旧版pandas用error_bad_lines=False
df = pd.read_csv(filename, index_col=None, header=0, error_bad_lines=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:12:00