我必须阅读熊猫的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 似乎是相关的,但不是解决方案,因为只接受第一个标头。
确切的文件结构描述:
... (varying number of empty rows)
__irrelevant_row__
HEADER_1
HEADER_2
当前为1或0空行。但是,正如评论中指出的那样,如果这样更动态,那将是很好的。
答案 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
不幸的是,我不知道它如何与您的实际数据交互,但是我希望这对您的搜索有所帮助。