Панда читать Excel лист с несколькими листами и различными смещениями заголовка - PullRequest
0 голосов
/ 08 ноября 2018

Мне нужно прочитать лист Excel в пандах, который содержит несколько листов. К сожалению, количество строк пробелов перед началом заголовка выглядит иначе:

pd.read_excel('foo.xlsx', header=[2,3], sheet_name='first')
pd.read_excel('foo.xlsx', header=[1,2], sheet_name='second')

Есть ли элегантный способ исправить это и прочитать Excel в pandas.Dataframe с дополнительным столбцом, который содержит название каждого листа?

т.е. как можно

pd.read_excel(file_name, sheet_name=None)

передать переменный аргумент заголовка или выбрать как минимум 2 первые (непустые) строки в качестве заголовка?

редактировать

динамически пропускать верхние пустые строки Excel в пандах Python кажется связанным, но не решением, так как принимаются только первые заголовки.

edit2

Описание точной файловой структуры:

... (varying number of empty rows)
__irrelevant_row__
HEADER_1
HEADER_2

где в данный момент это 1 или 0 пустых строк. Но, как указано в комментарии, было бы замечательно, если бы это было более динамичным.

1 Ответ

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

Я уверен, что это можно сделать более аккуратно, но способ достичь (я думаю) того, что вы хотите:

import openpyxl
import pandas as pd
book = openpyxl.load_workbook(PATH_TO_FILE)
for sh in book.sheetnames:
    a = pd.DataFrame(book[sh].values).dropna(how='all').reset_index(drop=True)
    a.columns = a.iloc[1]
    a = a.iloc[2:]
    a.iloc[0].index.name=sh
    a["sheet"] = a.iloc[0].index.name
    try:
        b = b.append(a)
    except NameError:
        b = a.copy()
b.iloc[0].index.name = ''
print(b)
#  header1 header2   sheet
#2       1       2   first
#3       3       4   first
#2       1       2  second
#3       3       4  second
#2       1       2     3rd
#3       3       4     3rd

К сожалению, я понятия не имею, как они взаимодействуют с вашими фактическими данными, но я надеюсь, что это поможет вам в ваших поисках.

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