如何在pandas中正确编码读取CSV文件,避免特殊字符显示为问号
问题根因
你使用的latin-1编码可覆盖的字符范围有限,CSV文件中Id – Column里的–属于En Dash(长破折号),不在latin-1的编码范围内,因此读取时无法识别的字符会被默认替换为?;而Id - Number里的普通半角短横-属于latin-1编码范围,因此显示正常。
解决方法
- 优先尝试匹配源文件的正确编码读取,是最稳妥的解决方案:
多数CSV默认使用UTF-8编码,先测试该编码:
如果是Windows系统下导出的CSV,可尝试UTF-8带BOM编码:my_df = pd.read_csv('my_csv.csv', encoding='utf-8')
简体中文环境下保存的CSV可尝试GBK编码:my_df = pd.read_csv('my_csv.csv', encoding='utf-8-sig')my_df = pd.read_csv('my_csv.csv', encoding='gbk') - 如果不知道源文件编码,可通过第三方库自动检测:
- 先安装检测库:
pip install chardet - 检测后读取的代码如下:
import chardet import pandas as pd with open('my_csv.csv', 'rb') as f: encode_info = chardet.detect(f.read()) my_df = pd.read_csv('my_csv.csv', encoding=encode_info['encoding']) - 先安装检测库:
- 应急场景下可强制保留所有原始字符,不做编码替换:
my_df = pd.read_csv('my_csv.csv', encoding='raw_unicode_escape')
内容的提问来源于stack exchange,提问作者James Lin
相关产品推荐
相关产品推荐

