我正在阅读一个包含8列的CSV文件到Pandas Dataframe 中。最后一列包含一个错误消息,其中一些包含逗号。这导致文件读取失败,并显示错误ParserError: Error tokenizing data. C error: Expected 8 fields in line 21922, saw 9
有没有办法忽略第8个字段之后的所有逗号,而不必遍历文件并删除多余的逗号?
读取文件的代码:
import pandas as pd
df = pd.read_csv('C:\\somepath\\output.csv')
有效的生产线:
061AE,Active,001,2017_02_24 15_18_01,00006,1,00013,some message
失败的线路:
061AE,Active,001,2017_02_24 15_18_01,00006,1,00013,longer message, with commas
4条答案
按热度按时间gg0vcinb1#
您可以在read_csv函数中使用参数usecols来限制读入的列。例如:
如果您只想读取前8列。
sbdsn5lh2#
您可以使用
re.sub
将前几个逗号替换为'|',将中间结果保存在StringIO
中,然后进行处理。我将问题中的两行放入一个文件中以获得此输出。
wribegjk3#
您可以在Pandas issues page上发布的此环形交叉路口进行拍摄:
您还可以对数据进行预处理,基本上将所有前7个逗号(0到6,包括0和6)改为分号,并将其后的逗号保留为逗号 *,使用如下代码:
现在可以将此
to_write
列表作为Pandas对象读取,如下所示或者将其写回到CSV中并使用带有分号分隔符的Pandas(panda)(例如
read_csv(csv_path, sep=';')
)来读取。我没有经过严格的测试就很快的起草了这个,但是应该给予你一些想法去尝试。如果有用或者没用,请评论,我会编辑它。
ih99xse14#
to join @Tblaz answer如果您使用GoogleColab,您可以使用此解决方案,在我的情况下,额外的逗号位于第24列,因此我只需读取23列: