如何在pandas python中使用read_csv(..)导入时处理.csv文件中的不匹配报价

时间:2017-09-19 11:29:05

标签: python pandas import quote

我有一个.csv这样的文件 -

A|B|C|D 
1|"|1|"1
2|2|2|2 
3|"|3|3 
4|4|4|4
5|"five"|5|5
6|6|6|6

我将此.csv文件导入为 -

data=pd.read_csv('C:\Python Work\inverted_commas.csv',sep='|',dtype={'B':object,'C':object,'D':object},names=['A','B','C','D'],skiprows=1)

结果如下:

A                           B    C    D
1                        |1|1  NaN  NaN
2                           2    2    2
3  |3|3\r\n4|4|4|4\r\n5|five"    5    5
6                           6    6    6 

|是此.csv文件的分隔符。由于我们在第1行和第3行(顶行是标题)中有无法匹配的双引号",因此导致整个导入错误。我希望结果如下 -

A         B    C    D
1         "    1   "1
2         2    2    2
3         "    3    3
4         4    4    4
5    "five"    5    5
6         6    6    6

SAS有趣地以这种方式正确导入此文件。在.read_csv中是否有一种方法或选项,我们可以指定在遇到分隔符的那一刻,无论起始引号是否与结束引号匹配,都应该用该值填充该列,如上所示?

1 个答案:

答案 0 :(得分:1)

您可以使用参数quoting=3

import pandas as pd
from pandas.compat import StringIO

temp=u"""A|B|C|D 
1|"|1|"1
2|2|2|2 
3|"|3|3 
4|4|4|4
5|"five"|5|5
6|6|6|6"""
#after testing replace 'StringIO(temp)' to 'filename.csv'
df = pd.read_csv(StringIO(temp), sep="|", quoting=3)

print (df)
   A       B  C  D 
0  1       "  1  "1
1  2       2  2  2 
2  3       "  3  3 
3  4       4  4   4
4  5  "five"  5   5
5  6       6  6   6