2014-06-11 94 views
4

我遇到了一些格式不正确的CSV数据,我需要读入熊猫数据框。我无法改变数据的记录方式(它来自其他地方),所以请不要提出解决方案。使用逗号解析最后一列中的CSV文件

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

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

所有行应该有相同数量的列(3),当然,这个例子中打破了CSV读者因为逗号建议有5列的时候,其实有3

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

什么我然而,知道额外的逗号总是发生在最后(最右边)列。这意味着我可以使用归结为以下解决方案:

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

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

+0

如果水湿找到一种方法..使用的FileReader(蟒蛇),然后导入尝试在名单列表加载文件在熊猫 - 我知道这不是解决方案,但我会用它作为解决方法 – user3570335

+0

你可以扩展这种方法吗? – moustachio

回答

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') 
+0

这很好,但不是行'row = line.split(',',3)'应该是'row = line.split(',',2)'。 “split”的第二个参数是要分割的数量,而不是列数。 – moustachio

+0

感谢您的更正。 – unutbu

相关问题