我必须在包含多张工作表的 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)
传递不同的标题参数或至少选择前 2 个(非空)行作为标题?
在 python pandas 中动态跳过 excel 的顶部空白行似乎是相关的,但不是解决方案,因为只接受第一个标题。
确切的文件结构说明:
... (varying number of empty rows)
__irrelevant_row__
HEADER_1
HEADER_2
目前它是 1 或 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
不幸的是,我不知道它如何与您的实际数据交互,但我确实希望这对您的探索有所帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句