【问题标题】:How to read a dataframe of encoded strings from csv in python如何在python中从csv中读取编码字符串的数据帧
【发布时间】:2013-03-25 07:56:38
【问题描述】:

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

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

【问题讨论】:

    标签: python utf-8 pandas


    【解决方案1】:

    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
    

    【讨论】:

    • 抱歉,您的代码有效,但前提是您使用 'print uni' 作为代码的最后一行。如果您尝试仅使用 'uni',则会收到错误消息:“UnicodeDecodeError: 'utf8' codec can't decode byte 0xe9 in position 67: invalid continuation byte”
    • @fabrizio_ff--你用的是什么pandas/numpy版本?
    • @root-- numpy: 1.6.2 // pandas: 0.9.1。我尝试使用你的最后一个代码,但如果我只写 'uni' 我会得到同样的错误(相反它适用于 'print uni')。
    • @fabrizio_ff -- 尝试将pandas 升级到最新版本,看看是否仍然出现错误。
    • @root--将 pandas 升级到 0.10.1。如果我使用 IPython Notebook 我会得到同样的错误,而如果我使用 spyder 控制台它可以工作。也许错误是由于我使用的是 iPython Notebook 造成的?谢谢!
    猜你喜欢
    • 1970-01-01
    • 2020-06-13
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-22
    • 2015-09-18
    相关资源
    最近更新 更多