读取CSV生成Pandas DataFrame时首列列名出现\ufeff异常字符如何解决
问题原因说明
\ufeff是UTF-8的BOM(字节顺序标记)字符,通常是Windows系统导出CSV文件时默认在文件头部添加的编码标识,不属于CSV的实际内容,所以会导致首列列名识别异常。
解决方案
方案1:修改读取编码参数(最推荐)
直接将读取文件时指定的编码从utf-8替换为utf-8-sig,该编码格式会自动识别并移除文件头部的BOM标记,不需要额外修改后续逻辑。
- 如果你使用Python内置csv模块实现LocalCsvHandler类,修改读取文件时的encoding参数即可
- 如果你后续直接使用pandas读取,调用时添加编码参数示例:
df = pd.read_csv('file_path.csv', encoding='utf-8-sig')
方案2:手动清理已读取的列名
如果暂时无法修改读取文件的编码逻辑,可以在得到OrderedDict列表后、转DataFrame前,手动清理所有键的BOM前缀,示例代码:
processed_list = [] for row in raw_ordered_dict_list: cleaned_row = {key.lstrip('\ufeff'): value for key, value in row.items()} processed_list.append(cleaned_row) # 再将处理后的列表转为DataFrame df = pd.DataFrame(processed_list)
方案3:预清理本地文件
如果CSV文件会被多次读取,可以在下载到本地后统一做一次BOM清理,后续读取就不需要重复处理:
with open('file_path.csv', 'r', encoding='utf-8') as f: content = f.read() # 移除BOM后重新写入 if content.startswith('\ufeff'): content = content.lstrip('\ufeff') with open('file_path.csv', 'w', encoding='utf-8') as f: f.write(content)
内容的提问来源于stack exchange,提问作者HuLu ViCa
相关产品推荐
相关产品推荐

