Pandas - доступ к ячейке внутри ячейки - PullRequest
2 голосов
/ 20 апреля 2020

Я работаю по следующей ссылке: https://www.bu.edu/phpbin/course-search/section/?t=casma124

Я проиндексировал фрейм данных, чтобы сосредоточиться на осени 2020 года. Вы можете видеть, что есть числа, показывающие, сколько 'Открыть Места есть. Если вы проверите элемент этих чисел, вы увидите, что они продаются в меньшем количестве, чем основной. Мой код python выводит следующее:

Section  Open Seats        Instructor Type Location              Schedule  \
0       A1         NaN  Enrique Jariwala  LEC  SCI B23  TR 11:00 am-12:15 pm   
1       A1         NaN  Enrique Jariwala  NaN     ROOM     M 8:00 pm-9:45 pm   
2       B1         NaN  Enrique Jariwala  LEC  SCI B23    TR 5:00 pm-6:15 pm   
3       B1         NaN  Enrique Jariwala  NaN     ROOM     M 8:00 pm-9:45 pm   
4       D1         NaN  Enrique Jariwala  DIS  PSY B39   W 11:15 am-12:05 pm   
5       D2         NaN  Enrique Jariwala  DIS  PSY B39    W 12:20 pm-1:10 pm   
6       D3         NaN  Enrique Jariwala  DIS  PSY B39     W 1:25 pm-2:15 pm   
7       D4         NaN  Enrique Jariwala  DIS  PSY B39     W 2:30 pm-3:20 pm   
8       D5         NaN  Enrique Jariwala  DIS  CAS 218    R 12:30 pm-1:20 pm   
9       D6         NaN  Enrique Jariwala  DIS  CGS 421     R 2:00 pm-2:50 pm   
10      D7         NaN  Enrique Jariwala  DIS  PRB 146     R 3:35 pm-4:25 pm   
11      D8         NaN  Enrique Jariwala  DIS  PRB 150     R 6:30 pm-7:20 pm   
12      DX         NaN  Enrique Jariwala  DIS      NaN             ARR 0: am   
13      L1         NaN  Enrique Jariwala  LAB  SCI 134    M 11:15 am-2:00 pm   
14      L2         NaN  Enrique Jariwala  LAB  SCI 134     T 6:30 pm-9:15 pm   
15      L3         NaN  Enrique Jariwala  LAB  SCI 134    W 8:00 am-10:45 am   
16      L4         NaN  Enrique Jariwala  LAB  SCI 134    W 11:15 am-2:00 pm   
17      L5         NaN  Enrique Jariwala  LAB  SCI 134     W 2:30 pm-5:15 pm   
18      L6         NaN  Enrique Jariwala  LAB  SCI 134     W 6:30 pm-9:15 pm   
19      L7         NaN  Enrique Jariwala  LAB  SCI 134    R 12:30 pm-3:15 pm   
20      L8         NaN  Enrique Jariwala  LAB  SCI 134     R 6:30 pm-9:15 pm   
21      LX         NaN  Enrique Jariwala  LAB      NaN             ARR 0: am   

Вы видите, что все открытые места показаны как значения NaN. Есть ли функция, которую я могу использовать для доступа к номерам. Я хотел бы иметь номер вместо NaN. Вот мой код для контекста.

def init_dataframe():

    html_dataframe = pd.read_html(wanted_class_url(course_input))
    dataframe_concatenate = pd.concat(html_dataframe)
    dataframe_semester = html_dataframe[-1]
    dataframe_locate_class = dataframe_semester.loc[:, ]

    return dataframe_locate_class

Спасибо за помощь!

1 Ответ

1 голос
/ 20 апреля 2020

У вас есть интересная проблема: причина того, что ваши фреймы данных показывают NaN вместо цифр, заключается в том, что после загрузки только часть HTML действительно пуста. Только после запуска скрипта view-section.js (в вашем локальном браузере) значения заполняются. Таким образом, чтобы получить те же данные из вашего скрипта, вам нужно будет получить те же данные, что и веб-сайт. Грубый набросок:

Получите открытые места для каждой «секции». К счастью, конечная точка openseats.php принимает массив кодов курсов, таких как:

https://www.bu.edu/phpbin/summer/rpc/openseats.php?sections[]=2020SPRGCASMA124%20B7

(И, очевидно, она возвращает все открытых мест курсов, независимо от того, какой код вы запрашиваете Таким образом, на данный момент достаточно одного запроса.)

В результате получается следующий JSON объект:

{"time_secs":0.20295810699463,"results":{"2020SPRGCASMA124 A1":"133","2020SPRGCASMA124 A2":"133","2020SPRGCASMA124 A3":"134","2020SPRGCASMA124 B1":"60","2020SPRGCASMA124 B2":"60","2020SPRGCASMA124 B3":"60","2020SPRGCASMA124 B4":"40","2020SPRGCASMA124 B5":"60","2020SPRGCASMA124 B6":"60","2020SPRGCASMA124 B7":"60","2020SPRGCASMA193 A1":"100","2020SPRGCASMA213 A1":"112","2020SPRGCASMA213 B1":"23","2020SPRGCASMA213 B2":"23","2020SPRGCASMA213 B3":"22","2020SPRGCASMA213 B4":"22","2020SPRGCASMA213 B5":"22","2020SPRGCASMA213 C1":"37","2020SPRGCASMA213 C2":"37","2020SPRGCASMA213 C3":"38"}}

Преобразуйте его также в DataFrame, и теперь вам просто нужно .join(..) оба кадра данных. Но подождите, в вашей исходной таблице отсутствуют коды курса crypti c. К сожалению, они появляются только в атрибуте data-section="..." некоторых ячеек таблицы.

К сожалению, в настоящее время наилучшим доступным способом получения этой информации является анализ HTML самостоятельно. Точка входа: from bs4 import BeautifulSoup (+ здесь много вопросов по SO).

Надеюсь, это поможет вам начать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...