Страницы

Поиск по вопросам

среда, 1 января 2020 г.

Ошибка: pandas.errors.ParserError: Error tokenizing data. C error: Expected 1 fields in line 5, saw 9

#python #pandas #dataframe #csv


Пытаюсь зугрузить tsv–файл в pandas.

import pandas as pd
df = pd.read_csv(filename, sep='\t')
print(df)


После выполнения этого кода в консоли вижу ошибку

df = pd.read_csv(filename, sep='\t') File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pandas/io/parsers.py",
line 655, in parser_f
return _read(filepath_or_buffer, kwds) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pandas/io/parsers.py",
line 411, in _read
data = parser.read(nrows) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pandas/io/parsers.py",
line 982, in read
ret = self._engine.read(nrows) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pandas/io/parsers.py",
line 1719, in read
data = self._reader.read(nrows) File "pandas/_libs/parsers.pyx", line 890, in pandas._libs.parsers.TextReader.read
(pandas/_libs/parsers.c:10862) File "pandas/_libs/parsers.pyx", line 912, in pandas._libs.parsers.TextReader._read_low_memory
(pandas/_libs/parsers.c:11138) File "pandas/_libs/parsers.pyx", line 966, in pandas._libs.parsers.TextReader._read_rows
(pandas/_libs/parsers.c:11884) File "pandas/_libs/parsers.pyx", line 953, in pandas._libs.parsers.TextReader._tokenize_rows
(pandas/_libs/parsers.c:11755) File "pandas/_libs/parsers.pyx", line 2184, in pandas._libs.parsers.raise_parser_error
(pandas/_libs/parsers.c:28765) pandas.errors.ParserError: Error tokenizing data. C
error: Expected 1 fields in line 5, saw 9


Подскажите, в чем может быть проблема?
    


Ответы

Ответ 1



Обычно эта ошибка говорит о том, что CSV/TSV файл "поломан", т.е. не является корректным CSV/TSV файлом. Иногда это случается, когда некоторые программы пишут в заголовок CSV/TSV файла техническую информацию или описание. В этом случае часто используют символ комментирования, например # в начале строки. Pandas умеет игнорировать закомментированные строки: pd.read_csv(filename, sep='\t', comment='#')

Ответ 2



Скорее всего ошибка в том, что в файле данные разбиты не верно (например, перед данными идет заголовок). Когда pandas пытается разобрать файл, библиотеке надо понять сколько создавать столбцов, и если в первых строках количество элементов данных отличается от последующих, то будет возникать ошибка. Я знаю про два решения. Игнорировать ошибку. pd.read_csv(filename, sep='\t', error_bad_lines=False) В этом случае таблица будет создана на основе первой строки и все, что не подойдет подойдет под ее формат будет опущено. Подойдет, если у вас идут данные с первой строки, но где–то в файле могут «слететь» данные. Пропустить заголовок pd.read_csv(filename, sep='\t', skiprows=N) В этом случае вы пропустите первые N строк файла, начав с N+1. Подходит для работы с файлами, в которых есть заголовки.

Комментариев нет:

Отправить комментарий