Pandas read_csv-如何在双引号内处理逗号,而双引号本身又在双引号内

时间:2018-12-10 15:42:08

标签: python pandas

这不是与double quoted elements in csv cant read with pandas相同的问题。

区别在于,这个问题是:“ ABC,DEF”正在破坏代码。

在这里,“ ABC“ DE”,F“破坏了代码。

整个字符串应解析为'ABC“ DE”,F'。相反,内部双引号导致了下面提到的问题。

我正在使用包含以下条目类型的csv文件:

  

header1,header2,header3,header4

     

2001-01-01,123456,“ abc def”,V4

     

2001-01-02,789012,“ ghi“ jklm” n,op“,V4

第二行数据正在破坏代码,出现以下错误:

ParserError: Error tokenizing data. C error: Expected 4 fields in line 1234, saw 5

我尝试使用各种sepdelimiterquoting等参数,但似乎无济于事。

有人可以帮忙吗?谢谢!

1 个答案:

答案 0 :(得分:0)

根据您在此处提供的两行,有一个选项,其中将文本文件读入Series对象,然后通过Series.str.extract()使用正则表达式提取以在{{ 1}}:

DataFrame

with open('so.txt') as f: contents = f.readlines() s = pd.Series(contents) 现在如下所示:

s

现在,您可以使用正则表达式提取将所需的内容放入 0 header1, header2, header3,header4\n 1 \n 2 2001-01-01,123456,"abc def",V4\n 3 \n 4 2001-01-02,789012,"ghi "jklm" n,op",V4

DataFrame

df = s.str.extract('^([0-9]{4}-[0-9]{2}-[0-9]{2}),([0-9]+),(.+),(\w{2})$') # remove empty rows df = df.dropna(how='all') 如下所示:

df

,您可以使用 0 1 2 3 2 2001-01-01 123456 "abc def" V4 4 2001-01-02 789012 "ghi "jklm" n,op" V4

设置列名称