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

标签 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 中是否有一种方法或选项可以指定遇到分隔符时,无论开始引号与结束引号是否匹配,都应填写该列具有该值,如上所示?

最佳答案

您可以使用参数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

关于python - 在 pandas python 中使用 read_csv(..) 导入时如何处理 .csv 文件中不匹配的引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46299275/

相关文章:

python - 对已按降序分组的条形图值进行排序

react-native - npm 包导出路径定义

python - 对一组自动化测试只运行一次 setUp

python - 可以在 python 中创建没有日期的 datetime.date 对象吗?

python - 使用subprocess.popen SSH,无法输入密码

python - 如何将一列中的每个单元格与 pandas 中的特定值进行比较?

python - pandas 合并与 ='outer' 和 pandas 追加方式之间的区别

oracle - 使用 Toad 将 Excel 电子表格导入 Oracle

java - 如何计算一个月中有多少个工作日?

python - ssh - 获取许多远程文件的元数据