5

假设我阅读了一个 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 在 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,但我认为这不是处理此问题的正确方法。

我对其他用户发布的关于这个论点的许多问题提出了质疑,但我没有解决这个问题。

4

1 回答 1

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
于 2013-03-25T08:02:36.343 回答