извлеките конкретную информацию из неструктурированной таблицы. Как я могу исправить эту ошибку, структурировать свои данные и получить нужную таблицу?

#python #python-3.x

Вопрос:

Я преобразовал свой pdf-файл в excel, и теперь у меня есть такая таблица

описание вашего изображения находится здесь

Я хотел бы извлечь информацию из таблицы, такую как «имя», «Идентификатор экзамена», «Идентификатор», «Адрес теста», «время тестирования теории» и «Время тестирования навыков». И запишите эту информацию в новый файл Excel. Кто-нибудь знает, как я это делаю с Python?

И я пробую фрейм данных от pandas

 import pandas as pd

df = pd.read_excel (r’Copy of pdf-v1.xlsx')
print (df)

 

но фрейм данных очень неструктурирован, а «Идентификатор экзамена» и имена людей распределены в разных местах таблицы. Подобный этому

 0                                             Exam ID   
1                                                  ID   
2                                             Company   
3                                                 Job   
4                              subject of examination   
5                                             Address   
6                                    theory test time   
7                                  Skill test address   
8                                     Skill test time   
9                                                 NaN   
10                                                NaN   
11                      P.S.: n1. xxxxn2. dfrn3.n   
12  examination                                   ...   
13                                               name   
14                                            Exam ID   
15                                                 ID   
16                                            Company   
17                                                Job   
18                             subject of examination   
19                                            Address   
20                                   theory test time   
21                                 Skill test address   
22                                    Skill test time   
23                                                NaN   
24                                                NaN   
25                      P.S.: n1. xxxxn2. dfrn3.n   
26  examination                                   ...   
27                                               name   
28                                            Exam ID   
29                                                 ID   
30                                            Company   
31                                                Job   
32                             subject of examination   
33                                            Address   
34                                   theory test time   
35                                 Skill test address   
36                                    Skill test time   
37                                                NaN   
38                                                NaN   
39                      P.S.: n1. xxxxn2. dfrn3.n   
40  examination                                   ...   
41                                               name   
42                                            Exam ID   
43                                                 ID   
44                                            Company   
45                                                Job   
46                             subject of examination   
47                                            Address   
48                                   theory test time   
49                                 Skill test address   
50                                    Skill test time   
51                                                NaN   
52                                                NaN   
53                      P.S.: n1. xxxxn2. dfrn3.n   

                                Smith  gender     male   Unnamed: 4  
0                               78610      NaN     NaN          NaN   
1                           108579352      NaN     NaN          NaN   
2                                 NaN      NaN     NaN          NaN   
3                              Police      NaN   Level   Level Five   
4                       Theory, Skill      NaN  Degree  high school   
5                               dffef      NaN     NaN          NaN   
6   2021-10-18 10:00~2021-10-18 11:30      NaN     NaN          NaN   
7                            cdwgrgtr      NaN     NaN          NaN   
8                    2021-10-19 09:30      NaN     NaN          NaN   
9                                 NaN      NaN     NaN          NaN   
10                                NaN      NaN     NaN          NaN   
11                                NaN      NaN     NaN          NaN   
12                                NaN      NaN     NaN          NaN   
13                            Charles  gender     male          NaN   
14                              74308      NaN     NaN          NaN   
15                          733440627      NaN     NaN          NaN   
16                                NaN      NaN     NaN          NaN   
17                           engeneer      NaN   Level   Level Five   
18                      Theory, Skill      NaN  Degree       Master   
19                              dffef      NaN     NaN          NaN   
20  2021-10-18 10:00~2021-10-18 11:30      NaN     NaN          NaN   
21                           cdwgrgtr      NaN     NaN          NaN   
22                   2021-10-19 09:30      NaN     NaN          NaN   
23                                NaN      NaN     NaN          NaN   
24                                NaN      NaN     NaN          NaN   
25                                NaN      NaN     NaN          NaN   
26                                NaN      NaN     NaN          NaN   
27                               Gary  gender     male          NaN   
28                              77564      NaN     NaN          NaN   
29                          392096759      NaN     NaN          NaN   
30                                NaN      NaN     NaN          NaN   
31                             driver      NaN   Level   Level Five   
32                      Theory, Skill      NaN  Degree  High school   
33                              dffef      NaN     NaN          NaN   
34  2021-10-18 10:00~2021-10-18 11:30      NaN     NaN          NaN   
35                           cdwgrgtr      NaN     NaN          NaN   
36                   2021-10-19 09:30      NaN     NaN          NaN   
37                                NaN      NaN     NaN          NaN   
38                                NaN      NaN     NaN          NaN   
39                                NaN      NaN     NaN          NaN   
40                                NaN      NaN     NaN          NaN   
41                            Whitney  gender   female          NaN   
42                              78853      NaN     NaN          NaN   
43                          207628593      NaN     NaN          NaN   
44                                NaN      NaN     NaN          NaN   
45                    data scientist       NaN   Level   Level Five   
46                      Theory, Skill      NaN  Degree       Master   
47                              dffef      NaN     NaN          NaN   
48  2021-10-18 10:00~2021-10-18 11:30      NaN     NaN          NaN   
49                           cdwgrgtr      NaN     NaN          NaN   
50                   2021-10-19 09:30      NaN     NaN          NaN   
51                                NaN      NaN     NaN          NaN   
52                                NaN      NaN     NaN          NaN   
53                                NaN      NaN     NaN          NaN   

    Unnamed: 5  Unnamed: 6  Unnamed: 7                         name.1  
0          NaN         NaN         NaN                        Exam ID   
1          NaN         NaN         NaN                             ID   
2          NaN         NaN         NaN                        Company   
3          NaN         NaN         NaN                            Job   
4          NaN         NaN         NaN         subject of examination   
5          NaN         NaN         NaN                        Address   
6          NaN         NaN         NaN               theory test time   
7          NaN         NaN         NaN             Skill test address   
8          NaN         NaN         NaN                Skill test time   
9          NaN         NaN         NaN                            NaN   
10         NaN         NaN         NaN                            NaN   
11         NaN         NaN         NaN  P.S.: n1. xxxxn2. dfrn3.n   
12         NaN         NaN         NaN                            NaN   
13         NaN         NaN         NaN                           name   
14         NaN         NaN         NaN                        Exam ID   
15         NaN         NaN         NaN                             ID   
16         NaN         NaN         NaN                        Company   
17         NaN         NaN         NaN                            Job   
18         NaN         NaN         NaN         subject of examination   
19         NaN         NaN         NaN                        Address   
20         NaN         NaN         NaN               theory test time   
21         NaN         NaN         NaN             Skill test address   
22         NaN         NaN         NaN                Skill test time   
23         NaN         NaN         NaN                            NaN   
24         NaN         NaN         NaN                            NaN   
25         NaN         NaN         NaN  P.S.: n1. xxxxn2. dfrn3.n   
26         NaN         NaN         NaN                            NaN   
27         NaN         NaN         NaN                           name   
28         NaN         NaN         NaN                        Exam ID   
29         NaN         NaN         NaN                             ID   
30         NaN         NaN         NaN                        Company   
31         NaN         NaN         NaN                            Job   
32         NaN         NaN         NaN         subject of examination   
33         NaN         NaN         NaN                        Address   
34         NaN         NaN         NaN               theory test time   
35         NaN         NaN         NaN             Skill test address   
36         NaN         NaN         NaN                Skill test time   
37         NaN         NaN         NaN                            NaN   
38         NaN         NaN         NaN                            NaN   
39         NaN         NaN         NaN  P.S.: n1. xxxxn2. dfrn3.n   
40         NaN         NaN         NaN                            NaN   
41         NaN         NaN         NaN                           name   
42         NaN         NaN         NaN                        Exam ID   
43         NaN         NaN         NaN                             ID   
44         NaN         NaN         NaN                        Company   
45         NaN         NaN         NaN                            Job   
46         NaN         NaN         NaN         subject of examination   
47         NaN         NaN         NaN                        Address   
48         NaN         NaN         NaN               theory test time   
49         NaN         NaN         NaN             Skill test address   
50         NaN         NaN         NaN                Skill test time   
51         NaN         NaN         NaN                            NaN   
52         NaN         NaN         NaN                            NaN   
53         NaN         NaN         NaN  P.S.: n1. xxxxn2. dfrn3.n   

                               Philip gender .1  male.1  Unnamed: 12  
0                               80425       NaN     NaN          NaN  
1                           121246038       NaN     NaN          NaN  
2                                 NaN       NaN     NaN          NaN  
3                              driver       NaN   Level   Level Five  
4                       Theory, Skill       NaN  Degree     Bachelor  
5                               dffef       NaN     NaN          NaN  
6   2021-10-18 10:00~2021-10-18 11:30       NaN     NaN          NaN  
7                            cdwgrgtr       NaN     NaN          NaN  
8                    2021-10-19 09:30       NaN     NaN          NaN  
9                                 NaN       NaN     NaN          NaN  
10                                NaN       NaN     NaN          NaN  
11                                NaN       NaN     NaN          NaN  
12                                NaN       NaN     NaN          NaN  
13                               Bill   gender     male          NaN  
14                              74788       NaN     NaN          NaN  
15                          332094931       NaN     NaN          NaN  
16                                NaN       NaN     NaN          NaN  
17                             driver       NaN   Level   Level Five  
18                      Theory, Skill       NaN  Degree  High school  
19                              dffef       NaN     NaN          NaN  
20  2021-10-18 10:00~2021-10-18 11:30       NaN     NaN          NaN  
21                           cdwgrgtr       NaN     NaN          NaN  
22                   2021-10-19 09:30       NaN     NaN          NaN  
23                                NaN       NaN     NaN          NaN  
24                                NaN       NaN     NaN          NaN  
25                                NaN       NaN     NaN          NaN  
26                                NaN       NaN     NaN          NaN  
27                              Betty   gender   female          NaN  
28                              61311       NaN     NaN          NaN  
 

Кроме того, я пытаюсь прочитать метку и извлечь следующую ячейку столбца, чтобы получить желаемые результаты, но цикл также выдает ошибку, которая соответствует кодам:

 for index, row in df.iterrows():
    if row['A2'] == 'Exam Id':
        exam_id=row['B2']

 

Затем python сказал, что ключевая ошибка:

 ---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
~/opt/anaconda3/lib/python3.7/site-packages/pandas/core/indexes/base.py in get_loc(self, key, method, tolerance)
   3360             try:
-> 3361                 return self._engine.get_loc(casted_key)
   3362             except KeyError as err:

~/opt/anaconda3/lib/python3.7/site-packages/pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()

~/opt/anaconda3/lib/python3.7/site-packages/pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

KeyError: 'A2'

The above exception was the direct cause of the following exception:

KeyError                                  Traceback (most recent call last)
<ipython-input-36-03e11799668c> in <module>
      1 for index, row in df.iterrows():
----> 2     if row['A2'] == 'Exam Id':
      3         exam_id=row['B2']

~/opt/anaconda3/lib/python3.7/site-packages/pandas/core/series.py in __getitem__(self, key)
    940 
    941         elif key_is_scalar:
--> 942             return self._get_value(key)
    943 
    944         if is_hashable(key):

~/opt/anaconda3/lib/python3.7/site-packages/pandas/core/series.py in _get_value(self, label, takeable)
   1049 
   1050         # Similar to Index.get_value, but we do not fall back to positional
-> 1051         loc = self.index.get_loc(label)
   1052         return self.index._get_values_for_loc(self, loc, label)
   1053 

~/opt/anaconda3/lib/python3.7/site-packages/pandas/core/indexes/base.py in get_loc(self, key, method, tolerance)
   3361                 return self._engine.get_loc(casted_key)
   3362             except KeyError as err:
-> 3363                 raise KeyError(key) from err
   3364 
   3365         if is_scalar(key) and isna(key) and not self.hasnans:


KeyError: 'A2'
 

Как я могу это исправить?
Новая таблица Excel, которую я хочу, это :

Имя ID Экзаменационный билет Время проверки теории Адрес Время проверки навыков Адрес для проверки навыков

Ответ №1:

Вероятно, вам лучше всего прочитать файл Excel самостоятельно с помощью openpyxl. Вы должны пройти через свои строки (каждый раз перепрыгивая через 14 строк) и получить значения в столбцах B и J . Затем вы создаете фрейм данных из своего списка словарей:

 from openpyxl import load_workbook
import pandas as pd

wb = load_workbook(filename = 'Copy of pdf-v1.xlsx.xlsx')
data_sheet = wb['Sheet1']     # enter the name of the Sheet
candidates = []
for i in range(1, data_sheet.max_row, 14):
    candidate1 = dict()
    candidate1['name'] = data_sheet[f'B{i}'].value
    candidate1['ID'] = data_sheet[f'B{i 1}'].value
    candidate1['Exam id'] = data_sheet[f'B{i 2}'].value
    candidate1['Theory Test Time'] = data_sheet[f'B{i 7}'].value
    candidate1['Address'] = data_sheet[f'B{i 6}'].value
    candidate1['Skill Test Time'] = data_sheet[f'B{i 9}'].value
    candidate1['Skill Test Address'] = data_sheet[f'B{i 8}'].value
    candidates.append(candidate1)

    candidate2 = dict()
    candidate2['name'] = data_sheet[f'J{i}'].value
    candidate2['ID'] = data_sheet[f'J{i 1}'].value
    candidate2['Exam id'] = data_sheet[f'J{i 2}'].value
    candidate2['Theory Test Time'] = data_sheet[f'J{i 7}'].value
    candidate2['Address'] = data_sheet[f'J{i 6}'].value
    candidate2['Skill Test Time'] = data_sheet[f'J{i 9}'].value
    candidate2['Skill Test Address'] = data_sheet[f'J{i 8}'].value
    candidates.append(candidate2)

table = pd.DataFrame(candidates)
print(table)
 

Комментарии:

1. Это мне очень помогает!! Спасибо тебе!!!

2. Не за что! Пожалуйста, примите ответ (и поддержите!), если он решил вашу проблему. В противном случае обновите свой вопрос описанием проблемы (проблем), с которой вы все еще сталкиваетесь.