【发布时间】:2017-05-04 15:16:36
【问题描述】:
我想在 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”或“使用 encoding='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 后完全消失
【问题讨论】:
-
你试过
encoding='latin1'吗? -
是的,Empf„nger 变成:Empfnger 在显示的单元格中,我将编辑我也尝试过 latin1 的原始问题。