在pandas中解析最后一列带逗号的CSV文件
我遇到了一些格式不太好的CSV数据,需要把它读进Pandas的数据框里。由于数据来源于其他地方,我无法改变数据的记录方式,所以请不要建议那种解决方案。
大部分数据都没问题,但有些行的最后一列有逗号。这里有个简单的例子:
column1 is fine,column 2 is fine,column3, however, has commas in it!
所有行应该有相同数量的列(3列),但这个例子会让CSV读取器出错,因为逗号让人误以为有5列,而实际上只有3列。
注意,这里没有使用引号来帮助我用标准的CSV读取工具处理这个问题。
不过,我知道,额外的逗号总是出现在最后一列。这意味着我可以用一个简单的解决方案:
“总是假设从左边数有3列,把所有额外的逗号当作第3列中的字符串内容。”换句话说,就是“把前两个逗号当作列的分隔符,但假设后面的逗号只是第3列字符串的一部分。”
我能想到很多笨拙的方法来实现这个,但我想问的是:有没有什么优雅、简洁的方法来解决这个问题,最好是在我调用pandas.csv_reader(...)
的时候就能做到?
1 个回答
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')