Pandas,读取CSV,忽略多余的逗号[英] Pandas, read CSV ignoring extra commas

本文是小编为大家收集整理的关于Pandas,读取CSV,忽略多余的逗号的处理方法,想解了Pandas,读取CSV,忽略多余的逗号的问题怎么解决?Pandas,读取CSV,忽略多余的逗号问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我正在将一个包含 8 列的 CSV 文件读取到 Pandas 数据框中.最后一列包含一条错误消息,其中一些包含逗号.这会导致文件读取失败并出现错误 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

推荐答案

您可以使用 re.sub 将前几个逗号替换为 '|',将中间结果保存在 StringIO 中,然后处理.

import pandas as pd
from io import StringIO
import re

for_pd = StringIO()
with open('MikeS159.csv') as mike:
    for line in mike:
        new_line = re.sub(r',', '|', line.rstrip(), count=7)
        print (new_line, file=for_pd)

for_pd.seek(0)

df = pd.read_csv(for_pd, sep='|', header=None)
print (df)

我将您问题中的两行放入一个文件中以获取此输出.

       0       1  2                    3  4  5   6  \
0  061AE  Active  1  2017_02_24 15_18_01  6  1  13   
1  061AE  Active  1  2017_02_24 15_18_01  6  1  13   

                             7  
0                 some message  
1  longer message, with commas  

本文地址:https://www.itbaoku.cn/post/1727882.html