航班票价预测项目Data Transformation Pipeline遇UnicodeDecodeError求助
解决pd.read_csv的UnicodeDecodeError问题
问题分析
回溯指向pd.read_csv(self.config.data_path)读取失败,错误字节0xa1通常不属于标准UTF-8编码,可能是文件实际编码与声明的UTF-8不符,或是Pipeline运行时读取的文件路径/内容和单独测试时存在差异。
解决方案
1. 指定兼容编码读取
尝试用常见编码格式读取文件,覆盖默认的UTF-8:
# 优先尝试Windows-1252(0xa1是该编码的常见字符) df = pd.read_csv(self.config.data_path, encoding='Windows-1252') # 若无效,再试GBK编码 # df = pd.read_csv(self.config.data_path, encoding='GBK') # 极端情况用latin-1(兼容所有字节,避免报错但可能显示乱码,需后续处理) # df = pd.read_csv(self.config.data_path, encoding='latin-1')
2. 验证Pipeline中的文件路径
检查Pipeline运行时的文件路径是否与单独测试一致,避免因相对路径基准不同读取了错误文件:
# 在读取前打印路径确认 print("当前读取路径:", self.config.data_path) df = pd.read_csv(self.config.data_path)
3. 重新保存文件为标准UTF-8
用文本编辑器(VS Code、Notepad++等)打开目标CSV文件,选择「另存为」,编码选择UTF-8(带/不带BOM都可尝试),覆盖原文件后重新运行Pipeline。
4. 临时跳过错误行(应急方案)
若仅个别行存在编码问题,可跳过错误行继续执行:
df = pd.read_csv(self.config.data_path, on_bad_lines='skip')
额外排查点
- 确认Pipeline运行的虚拟环境与单独测试环境的pandas版本一致,不同版本对编码的处理逻辑可能有差异。
- 检查文件是否被其他程序锁定或修改,导致读取内容与测试时不一致。
内容的提问来源于stack exchange,提问作者Md. Ehsanul Haque Kanan
相关产品推荐
相关产品推荐

