CSV文件含非法字符时不同程序表现不同,如何解决pandas.read_csv读取报错问题
VAERS数据集CSV读取失败解决方案
UnicodeDecodeError报错的核心原因是VAERS公开的CSV文件默认采用
latin1(ISO-8859-1)编码,而非pandas默认的UTF-8编码,0xb0是该编码下的合法字符(对应度数符号),无法被UTF-8解码器识别。tr命令报错是因为其默认按系统UTF-8编码解析输入文件,遇到不符合编码规范的字节就会触发非法序列报错。
可行解决方案
方案1:直接指定编码读取(推荐,无需修改原文件)
直接在pandas.read_csv参数中指定编码即可正常读取,同时添加low_memory=False避免多类型字段的推断警告:
import pandas as pd # 替换为你的实际文件路径 df = pd.read_csv("2021VAERSData.csv", encoding="latin1", low_memory=False)
方案2:忽略/替换非法字符
如果需要保持UTF-8编码读取,可通过errors参数处理非法字节,不会中断读取流程:
import pandas as pd df = pd.read_csv("2021VAERSData.csv", encoding="utf-8", errors="replace", low_memory=False)
注:该方案会将无法识别的字符替换为�符号,适合不需要完整保留特殊字符的场景
方案3:提前转码为UTF-8文件
如果需要生成通用的UTF-8格式文件方便后续处理,可使用iconv命令直接转码,不会触发tr的报错问题:
iconv -f latin1 -t utf-8//IGNORE 2021VAERSData.csv > 2021VAERSData_utf8.csv
转码后的文件可直接用默认UTF-8编码被pandas、各类工具正常读取。
内容的提问来源于stack exchange,提问作者Igor Rivin
相关产品推荐
相关产品推荐

