在 pandas python 中使用 read_csv(..) 导入时如何处理 .csv 文件中的不匹配引号
How to deal with Unmatched Quotes in .csv file while importing with read_csv(..) in pandas python
我有一个这样的 .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
</pre>
我将此 .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)
</pre>
结果如下所示:
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 </pre>
|
是此 .csv
文件的分隔符。由于我们在第 1 行和第 3 行中有不匹配的双引号 "
(第一行是 header),整个导入出错了。我想要这样的结果 -
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</pre>
SAS
有趣的是以这种方式正确导入这个文件。 .read_csv
中是否有一种方法或选项可以指定在遇到定界符时,无论开始引号是否与结束引号匹配,该列都应填写该值,如上图?
您可以使用参数 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
我有一个这样的 .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 </pre>
我将此
.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) </pre>
结果如下所示:
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 </pre>
|
是此.csv
文件的分隔符。由于我们在第 1 行和第 3 行中有不匹配的双引号"
(第一行是 header),整个导入出错了。我想要这样的结果 -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</pre>
SAS
有趣的是以这种方式正确导入这个文件。.read_csv
中是否有一种方法或选项可以指定在遇到定界符时,无论开始引号是否与结束引号匹配,该列都应填写该值,如上图?
您可以使用参数 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