使用无效字符(重音符号)将CSV文件读入Pandas Dataframe

时间:2015-06-19 19:18:55

标签: python csv pandas utf-8 dataframe

我正在尝试将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)

Excetera。它有效,但现在以“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,它将解决问题。

2 个答案:

答案 0 :(得分:1)

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

{{1}}

答案 1 :(得分:-1)

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