панды питона преуспевают

#python

Вопрос:

как работать с пандами и преуспевать в python

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

1. Каков ваш ожидаемый результат?

2. Это может быть много чего, я просто хочу более простое (с точки зрения пользовательского опыта). И если я не ошибаюсь, проще было бы создать файл Excel с указанием матчей и результатов. Спасибо за ваш ответ, Корралиен !

3. Победитель уже определен в рамках данных. Хотели бы вы, чтобы все это произошло за один раз вместо того, чтобы прилагать какие-либо усилия вручную?

4. А, ладно. Я понял. На самом деле я попытаюсь найти решение прямо сейчас

5. @AymenEddaoudi, важен ли дом и отъезд (имеет ли это значение?). Итак, если в вашем файле Excel указано, что Ливерпуль в отъезде, а Манчестер дома, должен ли он по-прежнему соответствовать Ливерпулю//Манчестеру??

Ответ №1:

Данные, которые вам нужны/которые вы запрашиваете здесь, находятся в api. Тогда вам не нужно использовать Селний. Просто получите все данные о событиях, и вы сможете манипулировать фреймом данных так, как вам нужно.

Это позволит получить все данные для вас:

 import requests
import pandas as pd
import datetime

today = datetime.datetime.now().strftime("%Y-%m-%d")
date_str = input("Input the date in the form of yyyy-mm-dd, hit Enter for todayn-> ")
if not date_str:
    date = today
else:
    date = datetime.datetime.strptime(date_str, "%Y-%m-%d").strftime("%Y-%m-%d")


url = 'https://push.api.bbci.co.uk/batch'
query = {
't':f'/data/bbc-morph-football-scores-match-list-data/endDate/{date}/startDate/{date}/todayDate/{today}/tournament/full-priority-order/version/2.4.6?timeout=5'}

jsonData = requests.get(url, params=query).json()

rows = []
matchData = jsonData['payload'][0]['body']['matchData']
for match in matchData:
    tournamentDatesWithEvents = match['tournamentDatesWithEvents']
    for k, v in tournamentDatesWithEvents.items():
        for i in v:
            events = i['events']
            for event in events:
                rows.append(event)
                
event_df = pd.json_normalize(rows)
 

Вывод: выборка всего из 1-х 5 строк

 Input the date in the form of yyyy-mm-dd, hit Enter for today
-> 2021-11-10

print(event_df.head(5).to_string())
      eventKey                  startTime  isTBC  minutesElapsed  minutesIntoAddedTime eventStatus eventStatusNote eventStatusReason eventOutcomeType eventType seriesWinner     cpsId cpsLive officials tournamentInfo eventActions startTimeInUKHHMM comment                      href            tournamentSlug homeTeam.key  homeTeam.scores.score  homeTeam.scores.halfTime  homeTeam.scores.fullTime homeTeam.scores.extraTime homeTeam.scores.shootout homeTeam.scores.aggregate homeTeam.scores.aggregateGoalsAway homeTeam.formation homeTeam.eventOutcome homeTeam.name.first  homeTeam.name.full homeTeam.name.abbreviation homeTeam.name.last awayTeam.key  awayTeam.scores.score  awayTeam.scores.halfTime  awayTeam.scores.fullTime awayTeam.scores.extraTime awayTeam.scores.shootout awayTeam.scores.aggregate awayTeam.scores.aggregateGoalsAway awayTeam.formation awayTeam.eventOutcome         awayTeam.name.first          awayTeam.name.full  awayTeam.name.abbreviation awayTeam.name.last eventProgress.period eventProgress.status venue.name.abbreviation    venue.name.videCode       venue.name.first        venue.name.full venue.homeCountry      tournamentName.first            tournamentName.full tournamentName.abbreviation
0  EFBO2257629  2021-11-10T17:00:00 00:00  False             NaN                   NaN  post-event          Result              None          regular   Regular         None      None    None        []           None         None             17:00    None                      None  international-friendlies    TFBB11658                      0                         0                         0                      None                     None                      None                               None               None                  loss              Kosovo              Kosovo                     Kosovo               None     TFBB1843                      2                         0                         0                      None                     None                      None                               None               None                   win                      Jordan                      Jordan                      Jordan               None             FULLTIME               RESULT   Stadiumi Fadil Vokrri  Stadiumi Fadil Vokrri  Stadiumi Fadil Vokrri  Stadiumi Fadil Vokrri              None  International Friendlies       International Friendlies              Int Friendlies
1  EFBO2245946  2021-11-10T17:45:00 00:00  False            90.0                   3.0  post-event          Result              None          regular   Regular         None      None    None        []           None         None             17:45    None                      None   womens-champions-league     TFBB9121                      4                         3                         4                      None                     None                      None                               None               None                   win  Barcelona Femenino  Barcelona Femenino         Barcelona Femenino               None     TFBB8706                      0                         0                         0                      None                     None                      None                               None               None                  loss  TSG 1899 Hoffenheim Ladies  TSG 1899 Hoffenheim Ladies  TSG 1899 Hoffenheim Ladies               None             FULLTIME               RESULT     Estadi Johan Cruyff    Estadi Johan Cruyff    Estadi Johan Cruyff    Estadi Johan Cruyff             Spain  Women's Champions League  UEFA Women's Champions League          Women's Champs Lge
2  EFBO2245947  2021-11-10T17:45:00 00:00  False            90.0                   4.0  post-event          Result              None          regular   Regular         None  59214028     yes        []           None         None             17:45    None  /sport/football/59214028   womens-champions-league    TFBB16926                      1                         0                         1                      None                     None                      None                               None               None                  loss       HB Køge Women       HB Køge Women              HB Køge Women               None     TFBB6272                      5                         1                         5                      None                     None                      None                               None               None                   win               Arsenal Women               Arsenal Women               Arsenal Women               None             FULLTIME               RESULT   Capelli Sport Stadion  Capelli Sport Stadion  Capelli Sport Stadion  Capelli Sport Stadion           Denmark  Women's Champions League  UEFA Women's Champions League          Women's Champs Lge
3  EFBO2245948  2021-11-10T20:00:00 00:00  False            90.0                   6.0  post-event          Result              None          regular   Regular         None      None    None        []           None         None             20:00    None                      None   womens-champions-league    TFBB16019                      0                         0                         0                      None                     None                      None                               None               None                  loss       Benfica Women       Benfica Women              Benfica Women               None    TFBB17702                      1                         0                         1                      None                     None                      None                               None               None                   win             BK Häcken Women             BK Häcken Women             BK Häcken Women               None             FULLTIME               RESULT    Caixa Futebol Campus   Caixa Futebol Campus   Caixa Futebol Campus   Caixa Futebol Campus          Portugal  Women's Champions League  UEFA Women's Champions League          Women's Champs Lge
4  EFBO2245949  2021-11-10T20:00:00 00:00  False            90.0                   4.0  post-event          Result              None          regular   Regular         None      None    None        []           None         None             20:00    None                      None   womens-champions-league     TFBB9100                      2                         0                         2                      None                     None                      None                               None               None                   win      Lyon Féminines      Lyon Féminines             Lyon Féminines               None     TFBB6597                      1                         1                         1                      None                     None                      None                               None               None                  loss    FC Bayern München Ladies    FC Bayern München Ladies    FC Bayern München Ladies               None             FULLTIME               RESULT        Groupama Stadium       Groupama Stadium       Groupama Stadium       Groupama Stadium            France  Women's Champions League  UEFA Women's Champions League          Women's Champs Lge
 

Теперь вы можете просто вытащить нужные столбцы:

 results = event_df[['homeTeam.name.full','homeTeam.eventOutcome','awayTeam.name.full','awayTeam.eventOutcome']]   
 

Выход:

 print(results.to_string())
      homeTeam.name.full homeTeam.eventOutcome          awayTeam.name.full awayTeam.eventOutcome
0                 Kosovo                  loss                      Jordan                   win
1     Barcelona Femenino                   win  TSG 1899 Hoffenheim Ladies                  loss
2          HB Køge Women                  loss               Arsenal Women                   win
3          Benfica Women                  loss             BK Häcken Women                   win
4         Lyon Féminines                   win    FC Bayern München Ladies                  loss
5                Walsall                  loss         Forest Green Rovers                   win
6            Exeter City                   win              Bristol Rovers                  loss
7         Wigan Athletic                   win             Shrewsbury Town                  loss
8              Broomhill                  loss              Bo'ness United                   win
9      Cumbernauld Colts                  loss                   Rangers B                   win
10       Dalbeattie Star                  loss               East Kilbride                   win
11    East Stirlingshire                   tie      University of Stirling                   tie
12                Grêmio                   win                  Fluminense                  loss
13  Athletico Paranaense                   win                       Ceará                  loss
14      Atlético Mineiro                   win                 Corinthians                  loss
15                Santos                   win         Red Bull Bragantino                  loss
16             Palmeiras                   win         Atlético Goianiense                  loss
 

ИЗМЕНИТЬ: ДОПОЛНИТЕЛЬНЫЙ КОД

 import pandas as pd

data = [['Liverpool','Manchester U'],
        ['Burnley'  ,'West Ham'],
        ['Arsenal'  ,'Chelsea'],
        ['Tottenham','Brentford']]

scraped_data = pd.DataFrame(data, columns = ['Home',    'Away'])



data = [['Liverpool',   'Manchester U', 'Liverpool'],
    ['TestTeamA',   'TestTeamB',    'TestTeamA'],
    ['Arsenal', 'Chelsea',  'Chelsea']]

excel_data = pd.DataFrame(data, columns = ['Home',  'Away', 'Result'])


result = scraped_data.merge(excel_data, how='left', on=['Home','Away']).dropna(subset=['Result'])
 

Выход:

 print(result)
        Home          Away     Result
0  Liverpool  Manchester U  Liverpool
2    Arsenal       Chelsea    Chelsea
 

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

1. Привет @chitown88 большое спасибо за ваш ответ! Я не думал о подходе API, но как мне на самом деле сопоставить эти данные с моим файлом Excel, чтобы программа определила победителя и вернула его (любым возможным способом, excel, обычный вывод терминала…).

2. Я думаю, что будет проще, если я объясню назначение моего источника руководства Excel, пожалуйста, проверьте исходный вопрос, я отредактирую его и попытаюсь объяснить. Еще раз большое спасибо !

3. Я буду следить за редактированием (хотя сегодня не смогу посмотреть). Я подозреваю, что вам придется выполнить слияние/объединение. Но вам нужно обязательно объединить/объединить ключ, который будет совпадать в 2 кадрах данных.

4. Только что опубликовал правку, смотри, когда будешь свободен, большое спасибо. И я попробую объединить/присоединиться, а затем дам вам знать

Ответ №2:

Таблицей этого URL-адреса не так просто манипулировать, я предлагаю использовать selenium:

 import pandas as pd
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service

options = webdriver.ChromeOptions() 
options.add_argument('--no-default-browser-check')
options.add_argument('--log-level=3')
options.add_argument('--headless')
service = Service('chromedriver.exe')
driver = webdriver.Chrome(options=options, service=service)
date = input(str("Input the date, hit Enter for today: "))
driver.get("https://www.bbc.com/sport/football/scores-fixtures/"   date)
games = driver.find_elements(By.XPATH, "//article[@data-event-id]")
ListHome = []
ListAway = []
ListTime = []
for game in games:
        ListHome.append(game.find_element(By.XPATH,".//span[contains(@class,'team--time-home')]").text)
        ListAway.append(game.find_element(By.XPATH,".//span[contains(@class,'team--time-away')]").text)
df = pd.DataFrame(list(zip(ListHome, ListAway)), columns =['Home', 'Away'])
df.to_excel('name.xlsx', index=False)
 

Используйте pd.merge для сравнения с другими электронными таблицами.

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

1. Привет, Вилиан, большое спасибо за твой ответ.

Ответ №3:

Привет, Вилиан, спасибо за твой ответ,

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

 DevTools listening on ws://127.0.0.1:24083/devtools/browser/c0807040-1041-4a0e-a9ed-f1add52c5484
Input the date, hit Enter for today: 
Traceback (most recent call last):
  File "c:UsersdgaygDesktoppyBettestmatch.py", line 19, in <module>
    ListHome.append(game.find_element(By.XPATH,".//span[contains(@class,'team--time-home')]").text)
  File "C:UsersdgaygAppDataLocalProgramsPythonPython39libsite-packagesseleniumwebdriverremotewebelement.py", line 718, in find_element
    return self._execute(Command.FIND_CHILD_ELEMENT,
  File "C:UsersdgaygAppDataLocalProgramsPythonPython39libsite-packagesseleniumwebdriverremotewebelement.py", line 693, in _execute
    return self._parent.execute(command, params)
  File "C:UsersdgaygAppDataLocalProgramsPythonPython39libsite-packagesseleniumwebdriverremotewebdriver.py", line 418, in execute
    self.error_handler.check_response(response)
  File "C:UsersdgaygAppDataLocalProgramsPythonPython39libsite-packagesseleniumwebdriverremoteerrorhandler.py", line 243, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":".//span[contains(@class,'team--time-home')]"}
  (Session info: headless chrome=95.0.4638.69)
Stacktrace:
Backtrace:
        Ordinal0 [0x00880C43 2493507]
        Ordinal0 [0x0081A4B1 2073777]
        Ordinal0 [0x00722608 1058312]
        Ordinal0 [0x0074CAA4 1231524]
        Ordinal0 [0x00743621 1193505]
        Ordinal0 [0x0076597A 1333626]
        Ordinal0 [0x007435A6 1193382]
        Ordinal0 [0x00765A2A 1333802]
        Ordinal0 [0x00775038 1396792]
        Ordinal0 [0x0076580B 1333259]
        Ordinal0 [0x00742314 1188628]
        Ordinal0 [0x0074316F 1192303]
        GetHandleVerifier [0x00A07BF6 1548950]
        GetHandleVerifier [0x00AB461C 2256060]
        GetHandleVerifier [0x0090C13B 518107]
        GetHandleVerifier [0x0090B1E0 514176]
        Ordinal0 [0x0081F53D 2094397]
        Ordinal0 [0x00823418 2110488]
        Ordinal0 [0x00823552 2110802]
        Ordinal0 [0x0082CE81 2150017]
        BaseThreadInitThunk [0x7518FA29 25]
        RtlGetAppContainerNamedObjectPath [0x76FA7A9E 286]
        RtlGetAppContainerNamedObjectPath [0x76FA7A6E 238]
 

Большое спасибо за ваше время !

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

1. Пожалуйста, не используйте ответ для ответа на другой ответ

2. Существует ограничение на количество символов