Python 2.7 使用Python时对非ASCII字符进行编码/解码

Python 2.7 使用Python时对非ASCII字符进行编码/解码,python-2.7,pandas,character-encoding,ascii,non-ascii-characters,Python 2.7,Pandas,Character Encoding,Ascii,Non Ascii Characters,我有一些非ASCII字符的数据。我尝试使用以下方法处理它: # coding=utf-8 import pandas as pd from pandas import DataFrame, Series import sys import re reload(sys) sys.setdefaultencoding('latin1') 虽然我发现了一些记录,但仍然存在编码/解码问题。我复制并粘贴了一条有问题的记录(包含记录的名称和位置列),如下所示: 'Eugène Badeau' 'E

我有一些非ASCII字符的数据。我尝试使用以下方法处理它:

# coding=utf-8
import pandas as pd
from pandas import DataFrame, Series
import sys
import re
reload(sys)
sys.setdefaultencoding('latin1')
虽然我发现了一些记录,但仍然存在编码/解码问题。我复制并粘贴了一条有问题的记录(包含记录的名称和位置列),如下所示:

'Eugène Badeau'    'E, Québec (county/comté), Quebec, Canada'
使用.decode('utf-8')添加到精确的文本提取中,它解决了这个问题

print 'Eugène Badeau   E, Québec (county/comté), Quebec, Canada'.decode('utf-8')
output: Eugène Badeau   E, Québec (county/comté), Quebec, Canada
所以我尝试使用它来转换我的pandas列:

df.name = df.name.str.encode('utf-8')
位置似乎还可以,但名称仍然错误:

print df.location[735]
print df.name[735]

output:
E, Québec (county/comté), Quebec, Canada
eugã¨ne badeau

您可以结合unidecode库应用:

from unidecode import unidecode

df['name']=df['name'].apply( lambda x:  unidecode(unicode(x, encoding = "utf-8")))
df['location']=df['location'].apply( lambda x:  unidecode(unicode(x, encoding = "utf-8")))

)()

我不能重现你的错误。。。看起来问题可能是你的名字列已经被转换成小写了?我刚刚用不同的文本编辑器测试了它,默认的python IDLE似乎没有问题(甚至不需要使用.encode或.decode),但是升华文本3似乎不断地给我出问题,这是一个遗憾,因为我非常喜欢这个编辑器,并且认为它在一个环境中很容易修复。