Python和Pandas:UnicodeDecodeError:'ascii'编解码器无法解码字节

时间:2015-09-21 07:00:22

标签: python json pandas encoding python-2.x

使用Pandas将json对象读入Pandas.DataFrame后,我们只想在每个pandas行的第一年print。例如:如果我们有2013-2014(2015),我们要打印2013

完整代码(here)

x = '{"0":"1985\\u2013present","1":"1985\\u2013present",......}'
a = pd.read_json(x, typ='series')
for i, row in a.iteritems():
    print row.split('-')[0].split('—')[0].split('(')[0]

发生以下错误:

---------------------------------------------------------------------------
UnicodeDecodeError                        Traceback (most recent call last)
<ipython-input-1333-d8ef23860c53> in <module>()
      1 for i, row in a.iteritems():
----> 2     print row.split('-')[0].split('—')[0].split('(')[0]

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 0: ordinal not in range(128)

为什么会这样?我们如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您的json数据字符串是unicode字符串,您可以通过打印其中一个值来查看:

In: a[0]
Out: u'1985\u2013present'

现在您尝试将字符串拆分为unicode \u2031(EN DASH),但是您为split提供的字符串不是unicode字符串(因此错误'ascii' codec can't decode byte 0xe2 - EN DASH不是ASCII字符)。

要使您的示例正常工作,您可以使用:

for i, row in a.iteritems():
    print row.split('-')[0].split(u'—')[0].split('(')[0]

注意解码破折号前面的u。您也可以编写u'\u2013'来分割字符串。

有关Python中unicode的详细信息,请参阅https://docs.python.org/2/howto/unicode.html