熊猫读取具有多个工作表和不同页眉偏移量的Excel工作表

时间:2018-11-08 08:59:44

标签: python excel pandas

我必须阅读熊猫的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)

被传递一个可变的标头参数,还是至少选择前两行(非空)作为标头?

编辑

dynamically skip top blank rows of excel in python pandas 似乎是相关的,但不是解决方案,因为只接受第一个标头。

edit2

确切的文件结构描述:

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

当前为1或0空行。但是,正如评论中指出的那样,如果这样更动态,那将是很好的。

1 个答案:

答案 0 :(得分:0)

我敢肯定,这可以更简洁的方式完成,但是一种实现(我认为)您想要的方式是:

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

不幸的是,我不知道它如何与您的实际数据交互,但是我希望这对您的搜索有所帮助。