Опечатка разделителя панд Python - двойной знак - PullRequest
0 голосов
/ 05 декабря 2018

Это мой код для открытия файла:

df = pd.read_csv(path_df, delimiter='|')

Я получаю ошибку: Ошибка токенизации данных.Ошибка C: ожидается 5 полей в строке 13571, увидел 6

Когда я проверяю эту конкретную строку, я вижу, что произошла опечатка и было 3 знака "|||"вместо одного.Я бы предпочел относиться к двойным и тройным признакам как к одному.Возможно, есть другое решение.

Как мне решить эту проблему?

Ответы [ 3 ]

0 голосов
/ 05 декабря 2018

Использовать разделитель регулярных выражений [|]+ - один или несколько |:

import pandas as pd

temp=u"""a|b|c
ss|||s|s
t|g|e"""
#after testing replace 'pd.compat.StringIO(temp)' to 'filename.csv'
df = pd.read_csv(pd.compat.StringIO(temp), sep="[|]+",engine='python')

print (df)
    a  b  c
0  ss  s  s
1   t  g  e
0 голосов
/ 05 декабря 2018

я подозреваю, что это будет вызвано неправильной записью файла, если поле должно содержать значение "|"но как-то было написано неправильно (csv обычно писал бы такую ​​строку как 1|2|3|"|"|5), но если он был написан по ошибке без какого-либо экранирования, это вызвало бы эту проблему.

В этом случае я не думаю, что выможно решить с помощью панд, потому что проблема плохо сформирована CSV.

Если это один, вы можете сначала отредактировать файл, возможно, чтобы заменить все "|||"с "||"- но опять же это может иметь непредвиденные последствия.У меня была эта проблема раньше, и я не думаю, что есть лучший способ, чем редактировать файл вручную (по крайней мере, pandas дает вам номер строки, на который нужно смотреть!)

С другой стороны, если это действительноэто просто повторная опечатка символа, тогда другой ответ будет работать нормально.

0 голосов
/ 05 декабря 2018

Другим способом определения разделителя является использование sep при чтении CSV в пандах.

df = pd.read_csv(path_df, sep=r'\|+', engine='python')

Всякий раз, когда вы замечаете 'ошибку C', требуется принудительное использованиеPython Engine, указав engine='python' в аргументах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...