如何从包含多个表的Excel电子表格中基于表头选择表?

时间:2018-09-07 12:48:30

标签: python pandas dataframe

我正在尝试与电子表格进行交互,并且已使用以下方式导入了该电子表格:

InitialImportedData = pd.read_excel(WorkbookLocation, SheetName)

问题是我要从中导入的电子表格包含多个表,而我只想使用其中之一。有没有办法删除特定值之前的所有行和列?

我要查找的表具有标题Premium。如何获取作为数据框的表格,而不是将所有分散有NaN的表格作为数据框?

有没有一种方法可以在数据帧中定位字符串并根据该字符串对其进行切片?这是唯一一个标有Premium的标签。

修改

我能够使用以下方法找到表格开始位置:

我以不同的方式解决了这个问题,这可能对那些想将未通过excel读取的数据帧进行切片的人有用。

for x in range (InitialImportedData.shape[1]):
    try :
        list(InitialImportedData.iloc[:,x]).index('Premium')
        print list(InitialImportedData.iloc[:,x]).index('Premium'),x        
    except: 
        pass

通过转换为列表,我能够看到值所在的位置。我还没有弄清楚如何在最后正确地分割数据。

我可以使用:

InitialImportedData.iloc[20:,4:]

创建一个从我需要的拐角处开始的数据集(恰好在20,4处),但是我没有找到一种方法来对表的末尾进行切片,因此不会从工作表中引入额外的信息

我在下面提供了一个示例数据集:

    Unnamed: 0 Unnamed: 1    Unnamed: 2    Unnamed: 3    Unnamed: 4  \
0          NaN    Table 1           NaN           NaN           NaN   
1          NaN    Header1       Header2           NaN           NaN   
2          NaN    9.88496       2.29552           NaN           NaN   
3          NaN    7.36861        2.6275           NaN           NaN   
4          NaN    5.34938       8.37391           NaN           NaN   
5          NaN    8.77608       3.70626           NaN           NaN   
6          NaN    7.37828       2.62692           NaN           NaN   
7          NaN    6.82297       9.59347           NaN           NaN   
8          NaN     7.6804       7.38528           NaN           NaN   
9          NaN    2.07633       3.76247           NaN           NaN   
10         NaN        NaN           NaN           NaN           NaN   
11         NaN        NaN           NaN           NaN           NaN   
12         NaN        NaN           NaN           NaN           NaN   
13         NaN        NaN           NaN           NaN           NaN   
14         NaN        NaN           NaN           NaN           NaN   
15         NaN        NaN           NaN           NaN           NaN   
16         NaN        NaN           NaN           NaN           NaN   
17         NaN        NaN           NaN           NaN           NaN   
18         NaN        NaN           NaN           NaN           NaN   
19         NaN        NaN       Premium           NaN           NaN   
20         NaN        NaN  FinalHeader1  FinalHeader2  FinalHeader3   
21         NaN        NaN      0.679507          8.95       5.87512   
22         NaN        NaN       6.22637       6.54385       4.70131   
23         NaN        NaN       8.84881       6.74557       3.31503   
24         NaN        NaN      0.506901       5.36873       2.42905   
25         NaN        NaN       3.91448      0.542635        8.0885   
26         NaN        NaN        5.4045       9.08379       2.35789   
27         NaN        NaN       4.26343       1.37477      0.719881   
28         NaN        NaN       3.03682       9.62835       1.56601   

    Unnamed: 5  Unnamed: 6  Unnamed: 7  Unnamed: 8  Unnamed: 9  
0          NaN         NaN         NaN         NaN         NaN  
1          NaN         NaN         NaN         NaN         NaN  
2          NaN         NaN         NaN         NaN         NaN  
3          NaN         NaN         NaN         NaN         NaN  
4          NaN         NaN         NaN         NaN         NaN  
5          NaN         NaN         NaN         NaN         NaN  
6          NaN     Table 2         NaN         NaN         NaN  
7          NaN  NewHeader1  NewHeader2  NewHeader3  NewHeader4  
8          NaN      1.2035     2.13923     9.59979     4.90745  
9          NaN    0.273928     9.84469     3.62225     1.07671  
10         NaN     3.67524     9.82434    0.366233      7.9009  
11         NaN     2.16405     2.66321     9.08495     8.29695  
12         NaN     6.77611     7.90381     5.13672     3.26688  
13         NaN     1.95482     1.95997     3.40453    0.702198  
14         NaN     6.39919     5.24728     4.16757     6.06336  
15         NaN     2.34901     9.35103     2.72374     7.39052  
16         NaN         NaN         NaN         NaN         NaN  
17         NaN         NaN         NaN         NaN         NaN  
18         NaN         NaN         NaN         NaN         NaN  
19         NaN         NaN         NaN         NaN         NaN  
20         NaN         NaN         NaN         NaN         NaN  
21         NaN         NaN         NaN         NaN         NaN  
22         NaN         NaN         NaN         NaN         NaN  
23         NaN         NaN         NaN         NaN         NaN  
24         NaN         NaN         NaN         NaN         NaN  
25         NaN         NaN         NaN         NaN         NaN  
26         NaN         NaN         NaN         NaN         NaN  
27         NaN         NaN         NaN         NaN         NaN  
28         NaN         NaN         NaN         NaN         NaN  

2 个答案:

答案 0 :(得分:0)

那是完全可能的。下面是我自己执行的一些代码。 Combo1x在工作表“参考”中使用标题“名称”。希望这会有所帮助!

filelog=pd.read_excel(desktop,read_only=True, sheetname=None, na_filter=False)


        combo1= Combobox(frame3, state='readonly')
        combo1x=list(filelog['Reference']['Name'])

编辑:一种仅获取“高级”数字的方法就是采用最大行数并使用while语句向后工作。

ash=logbook["Approvals"]
rows = ash.max_row
mylist=[]

while rows != FinalHeader1
    mylist.append()
    rows -= 1

答案 1 :(得分:0)

我最终通过编写如下函数解决了我的问题:

# This function will search for a table within a dataframe, and cut out the section defined with the header specified
# this header must be in the top left, and their must be nothing below or to the right of the table

def CutOutTable(WhereWeAreSearching, WhatWeAreSearchingFor):
    for x in range (WhereWeAreSearching.shape[1]):
        try :
            list(WhereWeAreSearching.iloc[:,x]).index(WhatWeAreSearchingFor)
            WhereToCut = list(WhereWeAreSearching.iloc[:,x]).index(WhatWeAreSearchingFor),x
            SlicedVersionOfWhereWeAreSearching = WhereWeAreSearching.iloc[WhereToCut[0]:,WhereToCut[1]:]
            return SlicedVersionOfWhereWeAreSearching.dropna(axis = 1,how = 'all')
        except:
            pass

它会在数据框中查找包含您要查找的短语的位置,并在其上方和左侧剪切信息,然后删除右侧包含NaN的列,从而为您提供整个表格。当且仅当表格是excel工作表中最右下的项目时。