Панды читают лист Excel с несколькими заголовками, когда первый столбец пуст - PullRequest
0 голосов
/ 22 мая 2018

У меня есть лист Excel, подобный этому:

Excel sheet

Я хочу прочитать его с пандами read_excel, и я попробовал это:

df = pd.read_excel("test.xlsx", header=[0,1])

но мне выдается эта ошибка:

ParserError: Passed header = [0,1] слишком много строк для этого multi_index столбцов

Любые предложения

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Здесь - документация по параметру header:

Строка (с индексами 0), используемая для меток столбцов анализируемого DataFrame.Если передан список целых чисел, эти позиции строк будут объединены в MultiIndex.Используйте None, если заголовок отсутствует.

Я думаю, что должно работать следующее:

df = pd.read_excel("test.xlsx", skiprows=2, usecols='B:F', header=0)
0 голосов
/ 22 мая 2018

Если вы не возражаете массировать DataFrame после прочтения Excel, вы можете попробовать два следующих способа:

>>> pd.read_excel("/tmp/sample.xlsx", usecols = "B:F", skiprows=[0])
  header1 Unnamed: 1 Unnamed: 2 header2 Unnamed: 4
0    col1       col2       col3    col4       col5
1       a          0          x       3          d
2       b          1          y       4          e
3       c          2          z       5          f

В приведенном выше примере вам придется исправить первый уровень MultiIndex, начиная с header1и header2 - это объединенные ячейки

>>> pd.read_excel("/tmp/sample.xlsx", header=[0,1], usecols = "B:F", 
skiprows=[0])
        header1      header2
header1    col1 col2    col3 col4
a             0    x       3    d
b             1    y       4    e
c             2    z       5    f

. В приведенном выше примере это довольно близко, пропустив пустую строку и проанализировав только столбцы (B: F) с данными.Если вы заметили, столбцы сместились, хотя ...

Примечание Не чистое решение, а просто хотел поделиться с вами образцами в сообщении, а не в комментарии

- Редактировать на основе обсуждения с OP -

На основании документации для панд read_excel , header[1,2] создает мультииндекс для ваших столбцов.Похоже, он определяет метки для DataFrame в зависимости от того, что заполнено в столбце A. Так как там ничего нет ... в индексе есть набор Nan, например,

>>> pd.read_excel("/tmp/sample.xlsx", header=[1,2])
    header1           header2
       col1 col2 col3    col4 col5
NaN       a    0    x       3    d
NaN       b    1    y       4    e
NaN       c    2    z       5    f

Опять же, если вывсе в порядке с очисткой столбцов, и если первый столбец xlsx всегда пуст ... вы можете удалить его, как показано ниже.Надеюсь, это то, что вы ищете.

>>> pd.read_excel("/tmp/sample.xlsx", header[1,2]).reset_index().drop(['index'], level=0, axis=1)
  header1           header2
     col1 col2 col3    col4 col5
0       a    0    x       3    d
1       b    1    y       4    e
2       c    2    z       5    f
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...