Existe-t-il un moyen d'extraire un modèle d'expression régulière en créant un lien dans une trame de données dans Pandas ?
P粉770375450
P粉770375450 2023-08-16 20:25:57
0
1
643
<p>J'essaie d'extraire un modèle d'expression régulière à partir de liens dans une table Pandas générée. </p> <p>Le code pour générer une trame de données Pandas est le suivant : </p> <pre class="brush:php;toolbar:false;">importer des pandas au format PD importer re 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] est Aucun autre f'{base_url}{link[1]}' pour le lien dans la col]) tableau</pré> <p>Je souhaite extraire l'ID de correspondance du lien dans le tableau. Pour chaque jeu, l'ID du jeu est l'ensemble consécutif de chiffres après le motif "t20i-" et se terminant avant la barre oblique. Par exemple: Pour cette correspondance, l’ID de correspondance est 211048. Voici le code pour un seul jeu : </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>Je souhaite opérer sur la table entière en utilisant un identifiant de correspondance de colonne dérivée. Cette colonne utilise la colonne Scorecard. Cependant, je n’ai pas réussi à y parvenir. </p> <p>J'ai d'abord essayé cette commande simple : </p> <pre class="brush:php;toolbar:false;">table['match_id']= re.findall('t20i-(d*)/', table['Scorecard']) tableau</pré> <p>J'obtiens une erreur « TypeError : chaîne attendue ou objet de type octets », ce qui me fait penser que le lien n'est pas stocké sous forme de chaîne et peut être à l'origine du problème. </p> <p>Ensuite, j'ai essayé : </p> <pre class="brush:php;toolbar:false;">table['match_id']= re.findall('t20i-(d*)/', str(table['Scorecard'])) tableau</pré> <p>Cela me donne une erreur « ValueError : La longueur des valeurs (0) ne correspond pas à la longueur de l'index (3) », je ne suis pas sûr de la cause. </p> <p>J'ai également essayé d'utiliser une fonction lambda, mais sans succès. Si cette méthode fonctionne, cela ne me dérangerait pas de l'utiliser. </p>
P粉770375450
P粉770375450

répondre à tous(1)
P粉310931198

Vous êtes proches. Cela ajoutera une nouvelle colonne avec l'ID de correspondance.

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)

Sortie :

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

[3 行 x 8 列]
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal