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

如何在Pandas中读取含特殊字符的数据集并自动检测编码

解决文本文件编码自动检测并正确读取的问题

要自动检测文件编码并正确读取这个数据集,你可以用以下几种实用方法:

方法1:用chardet库检测编码

chardet是Python常用的编码检测库,能通过分析字节内容判断编码类型。

步骤:

  1. 先安装chardet:
pip install chardet
  1. 编写代码检测并读取文件:
import pandas as pd
import chardet
import requests

url = "https://data.opensanctions.org/datasets/20230620/default/names.txt"

# 读取文件前10KB的字节内容(足够编码检测)
response = requests.get(url, stream=True)
raw_bytes = response.raw.read(10000)

# 检测编码
detect_result = chardet.detect(raw_bytes)
encoding = detect_result['encoding']
confidence = detect_result['confidence']
print(f"检测到编码: {encoding}, 置信度: {confidence}")

# 用检测出的编码读取文件
df = pd.read_csv(url, encoding=encoding, nrows=2, header=None)
print(df)

方法2:用cchardet提升检测速度

如果数据集很大,cchardet是chardet的C语言实现,速度更快,用法和chardet几乎一致:

  1. 安装:
pip install cchardet
  1. 代码只需把import chardet换成import cchardet as chardet即可。

方法3:用ftfy修复已乱码的内容

如果已经用错误编码读取了文件(比如你之前用latin1得到的乱码),可以用ftfy库直接修复乱码文本:

  1. 安装:
pip install ftfy
  1. 修复代码:
import pandas as pd
import ftfy

url = "https://data.opensanctions.org/datasets/20230620/default/names.txt"

# 先以latin1读取(避免解码报错),再修复乱码
df = pd.read_csv(url, encoding='latin1', nrows=2, header=None)
df[0] = df[0].apply(ftfy.fix_text)
print(df)

注意事项

  • 编码检测时尽量读取足够多的样本内容(比如几KB),避免因开头内容单一导致误判;
  • 如果检测结果置信度较低,可以手动尝试常见编码(如UTF-8、cp1252、UTF-16);
  • 部分文件可能带BOM(如UTF-8 with BOM),chardet也能识别这类编码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 04:00:30