【问题标题】:Reading a CSV file into Pandas Dataframe with invalid characters (accents)使用无效字符(重音)将 CSV 文件读入 Pandas Dataframe
【发布时间】:2015-09-05 21:15:23
【问题描述】:

我正在尝试将 csv 文件读入 pandas 数据帧。但是,csv 包含重音符号。我正在使用 Python 2.7

我遇到了UnicodeDecodeError,因为第一列中有重音符号。我已经阅读了很多网站,例如 this SO question about UTF-8 in CSV filesthis blog post on CSV errors related to newlinesthis blog post on UTF-8 issues in Python 2.7

我使用从那里找到的答案来尝试修改我的代码。最初我有:

import pandas as pd

#Create a dataframe with the data we are interested in
df = pd.DataFrame.from_csv('MYDATA.csv')
mode = lambda ts: ts.value_counts(sort=True).index[0]
cols = df['CompanyName'].value_counts().index
df['Calls'] = df.groupby('CompanyName')['CompanyName'].transform(pd.Series.value_counts)

特别版。它有效,但现在将“NÍ”和“Nê”作为客户名称传递会给出错误:

UnicodeDecodeError: 'utf8' codec can't decode byte 0xea in position 7: invalid continuation byte

我尝试将行更改为 df =pd.read_csv('MYDATA.csv',encoding ='utf-8') 但这会产生同样的错误。

所以我从我通过研究找到的建议中尝试了这个,但它也不起作用,我得到了同样的错误。

import pandas as pd
import csv

def unicode_csv_reader(utf8_data, dialect=csv.excel, **kwargs):
    csv_reader = csv.reader(utf8_data, dialect=dialect, **kwargs)
    for row in csv_reader:
        yield [unicode(cell, 'utf-8') for cell in row]


reader = unicode_csv_reader(open('MYDATA.csv','rU'), dialect = csv.reader)
#Create a dataframe with the data we are interested in
df =pd.DataFrame(reader)

我觉得将 csv 数据读入 pandas 数据框应该不难。有谁知道更简单的方法吗?

编辑:真正奇怪的是,如果我删除带有重音字符的行,我仍然会收到错误

UnicodeDecodeError: 'utf8' 编解码器无法解码位置的字节 0xd0 960: 无效的继续字节。

这很奇怪,因为我的测试 csv 有 19 行和 27 列。但我希望如果我为整个 csv 解码 utf8 它将解决问题。

【问题讨论】:

  • 请不要使用from_csv它不再更新使用顶级read_csv请试试这个:df =pd.read_csv(MYDATA.csv', encoding='utf-8')
  • 是的,我也试过了,但是如果我的行是:df =pd.DataFrame.read_csv,我会收到错误“AttributeError: type object 'DataFrame' has no attribute 'read_csv'” ('testing2.csv',encoding ='utf-8') 否则我得到相同的 UnicodeDecodeError 如果有两行 ra =pd.read_csv('testing2.csv',encoding ='utf-8') // df =数据框(ra)
  • 嗯,错误是正确的,DataFrame 没有read_csv 属性,如果您仔细阅读我的代码,它会显示pd.read_csv 所以import pandas as pd df = pd.read_csv(MYDATA.csv', encoding='utf-8')
  • 是的,我试过了。它使用 df = pd.read_csv(MYDATA.csv', encoding='utf-8') 给了我相同的 UnicodeDecodeError
  • 重点是,你的csv文件是用utf-8编码的吗?请参阅here 了解 python 2.7 中的通用编码器/解码器,但您需要为文件提供正确的编码。希望对您有所帮助。

标签: python csv pandas utf-8 dataframe


【解决方案1】:

尝试将其添加到脚本的顶部:

import sys  
reload(sys) 
sys.setdefaultencoding('utf8')

【讨论】:

  • 感谢您的意见!但是,我遇到了同样的错误。
【解决方案2】:

我知道当我们在 read_csv 中遇到错误时很烦人。你可以试试这个 df=pd.read_csv(filename,sep='',error_bad_lines=False)。它可以跳过坏行,可以节省很多时间。

【讨论】:

  • 哈哈,我希望这是真的,我现在在熊猫手下受苦
猜你喜欢
  • 2021-01-16
  • 2013-05-31
  • 2018-09-10
  • 2012-12-31
  • 2021-05-05
  • 1970-01-01
相关资源
最近更新 更多