Python熊猫载入csv ANSI格式为UTF-8
我想载入一个带熊猫的CSV文件在Jupyter笔记本中,其中包含像ä,ö,ü,ß这样的字符。Python熊猫载入csv ANSI格式为UTF-8
当我使用记事本打开CSV文件++这里有一个例子一行导致在ANSI格式的麻烦:
Empf„nger;Empf„ngerStadt;Empf„ngerStraáe;Empf„ngerHausnr.;Empf„ngerPLZ;Empf„ngerLand
正确的UTF-8的结果为EMPF“手指应该是:Empfänger
现在当我加载CSV数据在Windows上的Python 3.6大熊猫用下面的代码:
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文件它的工作原理,但显示不正确umlaute的位置。
示例代码:
df_a = pd.read_csv('afile.csv',sep=';',encoding='ANSI')
Empfänger被表示为:EMPF“手指
注:我试图将文件转换为UTF-8在记事本++和与熊猫模块之后加载它,但我仍然得到相同的错误。
我在网上搜索了一个解决方案,但提供的解决方案,如“改变格式在记事本++到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()
方法,但性格ü完全消失装入大熊猫数据帧
我无法找到一个后在尝试了从ISO-8859-1到8859-15,从UTF-8到UTF-32,从Windows-1250-1258的所有众所周知的编码并且没有任何工作正确后,找到合适的解决方案。所以我的猜测是文本编码在导出过程中被破坏了。我自己的解决方案是使用Windows-1251在Dataframe中加载文本文件,因为它不会在我的文本文件中删除特殊字符,然后用相应的替换所有破碎的字符。它是一个相当不满意的解决方案,需要花费大量的时间进行计算,但总比没有好。
一个小的补充:我尝试用十六进制编辑器读取BOM(字节对象标记),但文件没有。 – MBUser
当EmpfängerStraße显示为EMPF ANSI“ngerStraáe当作为解码‘’,或者更正确地在这种情况下CP1250,那么数据的实际编码是最有可能CP850:
print 'Empf„ngerStraáe'.decode('utf8').encode('cp1250').decode('cp850')
有你尝试过'encoding ='latin1''? –
是的,Empf“nger变成:Empfnger在显示的单元格中,我将编辑我最初的问题,我也尝试过latin1。 – MBUser