Gibt es eine Möglichkeit, ein Regex-Muster durch Verknüpfen in einem Datenrahmen in Pandas zu extrahieren?
P粉770375450
P粉770375450 2023-08-16 20:25:57
0
1
540
<p>Ich versuche, ein Regex-Muster aus Links in einer generierten Pandas-Tabelle zu extrahieren. </p> <p>Der Code zum Generieren eines Pandas-Datenrahmens lautet wie folgt: </p> <pre class="brush:php;toolbar:false;">Pandas als PD importieren Import bzgl 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]) Tabelle</pre> <p>Ich möchte die Match-ID aus dem Link in der Tabelle extrahieren. Für jedes Spiel ist die Spiel-ID eine fortlaufende Zahlenreihe, die dem Muster „t20i-“ folgt und vor dem Schrägstrich endet. Zum Beispiel: Für dieses Match lautet die Match-ID 211048. Hier ist der Code für ein einzelnes Spiel: </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-only-t20i-211048/full-scorecard' match_id = re.findall('t20i-(d*)/', scorecard_url) match_id[0]</pre> <p>Ich möchte die gesamte Tabelle bearbeiten, indem ich eine abgeleitete Spalten-Match-ID verwende. Diese Spalte verwendet die Scorecard-Spalte. Allerdings ist es mir nicht gelungen, dies zu erreichen. </p> <p>Ich habe zunächst diesen einfachen Befehl ausprobiert: </p> <pre class="brush:php;toolbar:false;">table['match_id']= re.findall('t20i-(d*)/', table['Scorecard']) Tabelle</pre> <p>Ich erhalte die Fehlermeldung „TypeError: erwarteter String oder byteähnliches Objekt“, was mich vermuten lässt, dass der Link nicht als String gespeichert wird und möglicherweise das Problem verursacht. </p> <p>Dann habe ich versucht: </p> <pre class="brush:php;toolbar:false;">table['match_id']= re.findall('t20i-(d*)/', str(table['Scorecard'])) Tabelle</pre> <p>Dadurch erhalte ich den Fehler „ValueError: Länge der Werte (0) entspricht nicht der Länge von Index (3)“. Ich bin mir nicht sicher, was die Ursache ist. </p> <p>Ich habe auch versucht, eine Lambda-Funktion zu verwenden, aber ohne Erfolg. Wenn diese Methode funktioniert, hätte ich nichts dagegen, sie zu verwenden. </p>
P粉770375450
P粉770375450

Antworte allen(1)
P粉310931198

你接近了。 这将添加一个带有比赛ID的新列。

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)

输出:

Team 1  ...   match
0   (新西兰, None)  ...  211048
1       (英格兰, None)  ...  211028
2  (南非, None)  ...  222678

[3 行 x 8 列]
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!