如何在Python中从CSV读取编码字符串的数据框
假设我在浏览一个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']
现在我想要:
- 把这些名字放进一个数据框(DataFrame)里;
- 把这个数据框保存成一个csv文件;
- 在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