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

5 投票
1 回答
2815 浏览
提问于 2025-04-18 09:25

我遇到了一些格式不太好的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')

撰写回答