使用python从电子表格提取多个表格

我想提取一系列excel电子表格中的多个表格,其中一些表格可能包含多个表格,将表格单独存储为例如csv文件。 表格可能是这样的:

在这里输入图像说明

如果我使用pandas read_excel读取它

import pandas as pd pd.read_excel('table_example.xlsx',header=None) 

我会得到这样的东西:

在这里输入图像说明

我怎么能提取不同的表格? 在我的情况表中有NaN值,这可能是一个额外的复杂性。

[EDIT1]类似于Excel表的东西可以使用pandas生成:

 df=pd.DataFrame(np.nan,index=range(0,10),columns=range(0,10)) df.iloc[1,2:5]=['t1h1','t1h2','t1h3'] df.iloc[2:5,2:5]=np.random.randn(3,3) df.iloc[6,3:7]=['t2h1','t2h2','t2h3','t2h4'] df.iloc[7:9,3:7]=np.random.randn(2,4) 

我试图用内置的pandasfunctionfind表格的限制:

 df[df.isnull().all(axis=1)] 

我可以使用第一和第二行来设置水平分割 ,也许做一个第一次拆分,但我不知道如何select上面或下面的标识行的单元格。 或者即使这是最方便的方法。

免责声明:在我的情况下,表格总是在标题上方的行中有一个标签,这是因为这些表格是由一个非python软件读取的,它使用它来标识表格的起始位置。 我决定不考虑这些标签问一个更通用的问题,其他人可能会遇到。

 import numpy as np import pandas as pd # I have assumed that the tables are "separated" by at least one row with only NaN values df=pd.DataFrame(np.nan,index=range(0,10),columns=range(0,10)) df.iloc[1,2:5]=['t1h1','t1h2','t1h3'] df.iloc[2:5,2:5]=np.random.randn(3,3) df.iloc[6,3:7]=['t2h1','t2h2','t2h3','t2h4'] df.iloc[7:9,3:7]=np.random.randn(2,4) print(df) # Extract by rows nul_rows = list(df[df.isnull().all(axis=1)].index) list_of_dataframes = [] for i in range(len(nul_rows) - 1): list_of_dataframes.append(df.iloc[nul_rows[i]+1:nul_rows[i+1],:]) # Remove null columns cleaned_tables = [] for _df in list_of_dataframes: cleaned_tables.append(_df.dropna(axis=1, how='all')) # cleaned_tables is a list of the dataframes print(cleaned_tables[0]) print(cleaned_tables[1])