Как выбрать таблицу на основе ее заголовка из электронной таблицы Excel, которая содержит несколько таблиц? - PullRequest
0 голосов
/ 07 сентября 2018

Я пытаюсь взаимодействовать с электронной таблицей, и я импортировал ее, используя:

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 голосов
/ 07 сентября 2018

Я решил свою проблему, написав функцию следующим образом:

# 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.

0 голосов
/ 07 сентября 2018

Это вполне возможно. Ниже приведен мой собственный код, с которым я это сделал. 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...