使用最后一列中的逗号在pandas中解析CSV文件

时间:2014-06-11 13:30:35

标签: python pandas

我遇到了一些格式不正确的CSV数据,我需要将其读入Pandas数据帧。我无法改变数据的记录方式(它来自其他地方),所以请不要提出任何解决方案。

大多数数据都很好,但有些行在最后一列中有逗号。一个简化的例子:

column1 is fine,column 2 is fine,column3, however, has commas in it!

所有行应该具有相同的列数(3),但是这个示例当然会破坏CSV阅读器,因为逗号表明有5列,实际上有3列。

请注意,没有引号可以让我使用标准的CSV阅读器工具来处理这个问题。

做什么知道,额外的逗号总是出现在最后一个(最右边)列中。这意味着我可以使用一个归结为:

的解决方案

"始终假设有3列,从左边开始计算,并将所有额外的逗号解释为第3列和第34列中的字符串内容。或者,措辞不同,"将前两个逗号解释为列分隔符,但假设任何后续逗号只是第3列中字符串的一部分。"

我可以想到很多方法来实现这一目标,但我的问题是:是否有任何优雅,简洁的方法来解决这个问题,最好是在我对pandas.csv_reader(...)的电话中?

1 个答案:

答案 0 :(得分:4)

修复csv,然后正常进行:

import csv
with open('path/to/broken.csv', 'rb') as f, open('path/to/fixed.csv', 'wb') as g:
    writer = csv.writer(g, delimiter=',')
    for line in f:
        row = line.split(',', 2)
        writer.writerow(row)

import pandas as pd
df = pd.read_csv('path/to/fixed.csv')