如何从python中的csv读取编码字符串的数据帧

时间:2013-03-25 07:56:38

标签: python utf-8 pandas

假设我读了一个html网站,我得到了一个名单,例如:'Amiel,Henri-Frédéric'。

为了获取名称列表,我使用以下代码解码html:

f = urllib.urlopen("http://xxx.htm")
html = f.read()
html=html.decode('utf8')
t.feed(html)
t.close()
lista=t.data

此时,变量lista包含一个名称列表,如:

[u'Abatantuono,Diego', ......, u'Amiel,Henri-Frédéric']

现在我想:

  1. 将这些名称放在DataFrame中;
  2. 将DataFrame保存在csv文件中;
  3. 通过DataFrame
  4. 阅读Python中的csv

    为简单起见,我们只考虑以上名称来完成步骤1到3.我将使用以下代码:

    name=u'Amiel, Henri-Fr\xe9d\xe9ric'
    name=name.encode('utf8')
    array=[name]
    df=pd.DataFrame({'Names':array})
    df.to_csv('names')
    uni=pd.read_csv('names')
    uni #trying to read the csv file in a DataFrame
    

    此时我收到以下错误:

    UnicodeDecodeError: 'utf8' codec can't decode byte 0xe9 in position 67: invalid continuation byte      
    

    如果我用以下代码替换上面代码的最后一行:

    print uni
    

    我可以阅读DataFrame,但我认为这不是解决此问题的正确方法。

    我向其他用户发布了很多关于这个论点的问题,但我没有解决这个问题。

1 个答案:

答案 0 :(得分:9)

to_csv方法和read_csv函数都采用encoding参数。用它。并在内部使用unicode。如果不这样做,尝试在程序中进行编码/解码将为您提供

import pandas as pd

name = u'Amiel, Henri-Fr\xe9d\xe9ric'
array = [name]
df = pd.DataFrame({'Names':array})
df.to_csv('names', encoding='utf-8')
uni = pd.read_csv('names', index_col = [0], encoding='utf-8')
print uni  # for me it works with or without print

出:

                   Names
0  Amiel, Henri-Frédéric