如何在Python中从CSV读取编码字符串的数据框

5 投票
1 回答
20302 浏览
提问于 2025-04-17 20:12

假设我在浏览一个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. 把这个数据框保存成一个csv文件;
  3. 在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

我可以读取这个数据框,但我觉得这不是处理这个问题的正确方法。

我看了很多其他用户关于这个问题的提问,但我还是没能解决这个问题。

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

撰写回答