我遇到了一些格式错误的 CSV 数据,我需要将这些数据读入 Pandas 数据帧。我无法更改数据的记录方式(它来自其他地方),所以请不要提出任何解决方案。
大多数数据都很好,但有些行在最后一列中有逗号。一个简化的例子:
column1 is fine,column 2 is fine,column3, however, has commas in it!
Run Code Online (Sandbox Code Playgroud)
所有行都应该有相同的列数 (3),但是这个例子当然打破了 CSV 阅读器,因为逗号表明有 5 列,而实际上有 3 列。
请注意,没有引用可以让我使用标准的 CSV 阅读器工具来处理这个问题。
然而,我所知道的是,额外的逗号总是出现在最后(最右边)列中。这意味着我可以使用归结为以下解决方案:
“始终假设有 3 列,从左侧开始计数,并将所有额外的逗号解释为第 3 列中的字符串内容”。或者,换种说法,“将前两个逗号解释为列分隔符,但假设任何后续逗号只是第 3 列中字符串的一部分。”
我可以想到很多笨拙的方法来实现这一点,但我的问题是:是否有任何优雅、简洁的方法来解决这个问题,最好是在我的调用中pandas.csv_reader(...)?
修复 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)
Run Code Online (Sandbox Code Playgroud)
import pandas as pd
df = pd.read_csv('path/to/fixed.csv')
Run Code Online (Sandbox Code Playgroud)