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
2023-08-16 20:25:57
<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>
Vous êtes proches. Cela ajoutera une nouvelle colonne avec l'ID de correspondance.
Sortie :