Rumah  >  Soal Jawab  >  teks badan

Adakah terdapat cara untuk mengekstrak corak regex dengan memaut dalam bingkai data dalam Pandas?

<p>Saya cuba mengekstrak corak regex daripada pautan dalam jadual Pandas yang dijana. </p> <p>Kod untuk menjana bingkai data Pandas adalah seperti berikut: </p> <pre class="brush:php;toolbar:false;">import panda sebagai pd import semula url = 'https://www.espncricinfo.com/records/year/team-match-results/2005-2005/twenty20-internationals-3' base_url = 'https://www.espncricinfo.com' table = pd.read_html(url, extract_links = "body")[0] table = table.apply(lambda col: [link[0] if link[1] is None else f'{base_url}{link[1]}' for link in col]) jadual</pra> <p>Saya mahu mengeluarkan ID padanan daripada pautan dalam jadual. Untuk setiap permainan, ID permainan ialah set nombor berturut-turut mengikut corak "t20i-" dan berakhir sebelum garis miring. Sebagai contoh: Untuk perlawanan ini, ID perlawanan ialah 211048. Berikut ialah kod untuk satu permainan: </p> <pre class="brush:php;toolbar:false;">scorecard_url = 'https://www.espncricinfo.com/series/australia-tour-of-new-zealand-2004-05-61407/new- zealand-vs-australia-sahaja-t20i-211048/kad-skor penuh' match_id = re.findall('t20i-(d*)/', scorecard_url) match_id[0]</pre> <p>Saya mahu beroperasi pada keseluruhan jadual dengan menggunakan id padanan lajur terbitan. Lajur ini menggunakan lajur Kad Skor. Walau bagaimanapun, saya tidak dapat mencapai ini. </p> <p>Saya pada mulanya mencuba arahan mudah ini: </p> <pre class="brush:php;toolbar:false;">table['match_id']= re.findall('t20i-(d*)/', table['Scorecard']) jadual</pra> <p>Saya mendapat ralat 'TypeError: rentetan jangkaan atau objek seperti bait', yang membuatkan saya berfikir bahawa pautan itu tidak disimpan sebagai rentetan dan mungkin menyebabkan masalah. </p> <p>Kemudian saya mencuba: </p> <pre class="brush:php;toolbar:false;">table['match_id']= re.findall('t20i-(d*)/', str(table['Scorecard'])) jadual</pra> <p>Ini memberi saya ralat 'ValueError: Length of values ​​​​(0) not match length of index (3)', saya tidak pasti apa puncanya. </p> <p>Saya juga cuba menggunakan fungsi lambda, tetapi tidak berjaya. Jika kaedah ini berkesan, saya tidak keberatan menggunakannya. </p>
P粉770375450P粉770375450430 hari yang lalu572

membalas semua(1)saya akan balas

  • P粉310931198

    P粉3109311982023-08-17 00:08:30

    Anda dekat. Ini akan menambah lajur baharu dengan ID padanan.

    import pandas as pd
    import re
    
    url = 'https://www.espncricinfo.com/records/year/team-match-results/2005-2005/twenty20-internationals-3'
    base_url = 'https://www.espncricinfo.com'
    
    def match(row):
        match_id = re.findall('t20i-(\d*)/', row[1])
        return match_id[0]
        
    table = pd.read_html(url, extract_links = "body")[0]
    table['match'] = table['Scorecard'].apply(match)
    print(table)

    Keluaran:

    Team 1  ...   match
    0   (新西兰, None)  ...  211048
    1       (英格兰, None)  ...  211028
    2  (南非, None)  ...  222678
    
    [3 行 x 8 列]

    balas
    0
  • Batalbalas