我遇到了一些格式不正确的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(...)
的电话中?
答案 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')