Python read_csv - ParserError: Ошибка токенизации данных - PullRequest
0 голосов
/ 29 сентября 2018

Я понимаю, почему я получаю эту ошибку при попытке df = pd.read_csv(file):

ParserError: Error tokenizing data. C error: Expected 14 fields in line 7, saw 30

Когда он читает в CSV, он видит 14 строк / столбцов в первой строке,основанный на первой строке csv называет это заголовками (что я и хочу).

Тем не менее, эти столбцы расширяются дальше вниз на строки (в частности, когда он попадает в строку 7).

Я могу найти решения, которые будут читать это, пропустив эти строки 1-6, но я не хочу этого.Я все еще хочу, чтобы весь csv был прочитан, но вместо заголовка, состоящего из 14 столбцов, как я могу сказать, что заголовок должен быть 30 столбцов, а если нет текста / строки, просто оставьте столбец как "", или нольили случайная нумерация.Другими словами, мне все равно, как он называется, мне просто нужен пробел, чтобы он мог анализировать после строки 6.

Мне интересно, есть ли способ прочитать в csv и явно сказать30 столбцов, но решение не найдено.

Ответы [ 2 ]

0 голосов
/ 29 сентября 2018

как насчет попытки, отметим, что error_bad_lines=False приведет к пропуску ошибочных строк

data = pd.read_csv('File_path', error_bad_lines=False)

Всего несколько ответов на вопросы ...

Возможно, проблема вРазделители в ваших данных в первой строке. Чтобы решить эту проблему, попробуйте указать аргументы sep и / или header при вызове read_csv.Например,

df = pandas.read_csv('File_path', sep='delimiter', header=None)

В приведенном выше коде sep определяет ваш разделитель, а header = None сообщает пандам, что в ваших исходных данных нет строки для заголовков / заголовков столбцов.Таким образом, документация гласит: «Если файл не содержит строки заголовка, вы должны явно передать header = None».В этом случае pandas автоматически создает индексы целых чисел для каждого поля {0,1,2, ...}.

Согласно документам, разделитель не должен быть проблемой.В документах говорится, что «если sep равен None [не указан], он попытается автоматически определить это».Однако мне не повезло с этим, включая случаи с очевидными разделителями.

Это может быть проблемой с разделителем, так как большая часть CSV CSV создается с использованием sep = '/ t', поэтому попробуйте read_csvиспользуя символ табуляции (\ t), используя разделитель / t.поэтому попробуйте открыть, используя следующую строку кода.

data=pd.read_csv("File_path", sep='\t')

ИЛИ

pandas.read_csv('File_path',header=None,sep=', ')
0 голосов
/ 29 сентября 2018

Я могу выдать несколько случайных решений, которые, по моему мнению, должны работать.

1) Установить заголовок = Нет и дать имена столбцов в атрибуте «Имя» read_csv.

 df=pd.read_csv(file, header=None, namees = [field1, field2, ...., field 30])

PS.Это будет работать, если у вашего CSV еще нет заголовка.

2) Во-вторых, вы можете попробовать использовать команду ниже (если у вашего csv уже есть строка заголовка)

df=pd.read_csv(file, usecols=[0,1,2,...,30])

Дайте мне знатьесли это сработает для вас.

Спасибо,

Рохан Ходаркар

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