我想在 Jupyter Notebooks 中加载带有 pandas 的 CSV 文件,其中包含 ä,ö,ü,ß 等字符。
当我用 Notepad++ 打开 csv 文件时,这是一个导致 ANSI 格式出现问题的示例行:
Empf„nger;Empf„ngerStadt;Empf„ngerStraáe;Empf„ngerHausnr.;Empf„ngerPLZ;Empf„ngerLand
Empf„nger 的正确 UTF-8 结果应该是:Empfänger
现在,当我使用以下代码在 Windows 上的 Python 3.6 pandas 中加载 CSV 数据时:
df_a = pd.read_csv('file.csv',sep=';',encoding='utf-8')
我收到错误消息:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe1 in position xy: invalid continuation byte
位置“xy”是导致错误消息的字符出现的位置
当我使用 ansi 格式加载我的 csv 文件时,它可以工作,但显示的变音符号不正确。
示例代码:
df_a = pd.read_csv('afile.csv',sep=';',encoding='ANSI')
Empfänger 表示为:Empf„nger
注意:我试图在 Notepad++ 中将文件转换为 UTF-8,然后用 pandas 模块加载它,但我仍然遇到同样的错误。
我在网上搜索了一个解决方案,但提供的解决方案例如“将 notepad++ 中的格式更改为 utf-8”或“使用编码=‘UTF-8’”或’latin1’,它们给我的结果与 ANSI 格式或
import chardet
with open('afile.csv', 'rb') as f:
result = chardet.detect(f.readline())
df_a = pd.read_csv('afile.csv',sep=';',encoding=result['encoding'])
没有为我工作。
encoding='cp1252'
抛出以下异常:
UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 2: character maps to <undefined>
之后我还尝试用 x.replace()
方法替换字符串,但字符 ü 在加载到 pandas DataFrame 后完全消失
原文由 MBUser 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果您不知道您的文件编码是什么,我认为最快的方法是在文本编辑器(如 Notepad++ )上打开文件以检查您的文件是如何编码的。
然后你去 python 文档 并寻找正确的编解码器来使用。
在你的情况下,ANSI,编解码器是’mbcs’,所以你的代码看起来像这些