Python pandas.readexcel (filepath, header = [0,1]) завершается ошибкой, когда в строке 3 данные длиннее длины заголовка.Любое предложение исправить можно только приветствовать - PullRequest
0 голосов
/ 29 ноября 2018

Я определил первые две строки, т.е. 0,1 моего excel (xlsx) в качестве заголовков.Для простоты файл Excel имеет только один лист.После первых двух строк в файле мало строк данных.Из-за двух заголовков pandas предоставляет мне многоиндексированный фрейм данных, и это нормально.

dataframe = pandas.readexcel(filepath, header=[0,1]) 

Приведенная выше строка дает мне действительный фрейм данных, когда в файле есть все строки вплоть до ширины заголовка.

Вот проблема.В одном из моих файлов Excel у меня есть 65 столбцов Excel для строк заголовка, а некоторые строки данных имеют 66 столбцов.pandas не может выполнить

dataframe = pandas.readexcel(filepath, header=[0,1])

, выдавая ошибку как

pandas.errors.ParserError: Expected 65 fields in line 3, saw 66

Как указать pandas прочитать только 65 столбцов файла?Установка usecols param как это

dataframe = pandas.readexcel(filepath, header=[0,1], usecols=65) 

не работает может быть из-за мультииндексирования.

Я использую панды 0.23.4, numpy 1.15.4, python 3.6.5

Вот макет данных, где первые две строки, то есть заголовки, имеют только 5 столбцов данных.В то время как в строке, содержащей данные для Apple, есть дополнительный столбец со значением 10.

header1 header1   header1  2018 2019
id      brand     Model    qty  qty
1       Apple     iPhone    2    3    10
2       Samsung   Galaxy    2    5    

Есть идеи по ограничению длины заголовка только для чтения?

1 Ответ

0 голосов
/ 30 ноября 2018

Обычно pandas удается правильно проанализировать файл.Так что это немного странно.

Однако учтите, что usecols имеет индекс 0.Это означает, что если вы дадите ему значение 65, он будет анализировать 0-65 = 66 столбцов, что приведет к той же ошибке.(Хотя он должен ввести 66-й столбец с безымянным заголовком)

Можете ли вы попробовать:

  1. dataframe = pandas.readexcel(filepath, header=[0,1], usecols=[64])
  2. dataframe = pandas.readexcel(filepath, header=[0,1], range(0,65))
  3. измените диапазон или список на меньшие значения и посмотрите, будет ли он по-прежнему жаловаться на 66-й столбец.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...