python csv模块读取用逗号分隔的csv,但忽略双引号或单引号内的逗号

标签 python pandas csv

我有一个 .csv 文件,其中列值包含一些逗号。以下是示例:

Header: ID     Value           Content                                            Date
        1      34             "market, business"                               12/20/2013
        2      15             "market, business", yesterday, metric            11/21/2014
        3      18             "market," business and yesterday                 10/20/2014
        4      19              yesterday, today,                               11/22/2014

这是 .csv 文件的格式,如果我在 Sublime Text 中打开该文件,它会显示为以下格式:

1, 34, "market, business", 12/20/2013
2, 15, "market, business", "yesterday, metric, 11/21/2014
3, 18, "market," business and yesterday, 10/20/2014
4, 19, yesterday, today, 11/22/2014

但是我想要的是python csv阅读器程序之后是:

[1, 34, "market, business", 12/20/2013]
[2, 15, "market, business" "yesterday metric, 11/21/2014]
[3, 18, "market," business and yesterday, 10/20/2014]
[4, 19, yesterday today, 11/22/2014]

这些只是我拥有的示例数据,“内容”列是这里令人头痛的原因,因为 csv 模块使用“,”作为分隔符,我使用了

reader = csv.reader(f, skipinitialspace=True)

如果所有字符串都在一个双引号内,则它适用于第一行。但如果引号外有逗号(单引号或双引号),则不适用于第三行和第二行

如何解决这个问题?我现在只是在python中使用传统的csv模块,“panda”有能力解决这个问题吗?

谢谢。

我做了一些更新,我想我想要的是,在不同地方指定逗号的方法...... 现在我粘贴到这里似乎不合理,因为我无法在 csv 模块内部找到来区分字段内分隔符“,”和“,”的差异。即使是Excel也不能...

有什么想法吗?

最佳答案

如果我们可以假设

  • 每行以两个用逗号分隔的整数开头,
  • 每行以日期结尾,以逗号分隔
  • 剩下的所有内容(中间)都属于第三列

那么你的数据可以这样解析:

data = list()
with open('data') as f:
    for line in f:
        parts = line.split(',', 2)
        parts[2:4] = parts[2].rsplit(',', 1)
        parts[:2] = map(int, parts[:2])
        parts[2:] = map(str.strip, parts[2:])
        data.append(parts)

for row in data:
    print(row)

产量

[1, 34, '"market, business"', '12/20/2013']
[2, 15, '"market, business", "yesterday, metric', '11/21/2014']
[3, 18, '"market," business and yesterday', '10/20/2014']
[4, 19, 'yesterday, today', '11/22/2014']
<小时/>

然后你可以创建一个像这样的 DataFrame:

import pandas as pd
df = pd.DataFrame(data, columns=['Id','Value','Content','Date'])
print(df)

产量

   Id  Value                                 Content        Date
0   1     34                      "market, business"  12/20/2013
1   2     15  "market, business", "yesterday, metric  11/21/2014
2   3     18        "market," business and yesterday  10/20/2014
3   4     19                        yesterday, today  11/22/2014

关于python csv模块读取用逗号分隔的csv,但忽略双引号或单引号内的逗号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27554036/

相关文章:

python - 将列表的 Python 列表转换为字符串

python - RobotFramework 使用整数值而不是字符串创建字典

python - 蛋白质数据库的 SQL 表

python - 在不存储外部文件的情况下在python中操作shell的图像输出

python - 通过附加不同大小的列将多个 csv 文件读取到 Pandas 数据框中

Python 与 Pandas - KeyError : u'the label [422] is not in the [index]

linux - 如何在unix中修改同一个文件?

linux - 使用linux或python删除特殊字符

python - Elasticsearch - 不需要完全匹配

python - 对 pandas MultiIndex 数据帧进行重新采样