2
votes

Utilisez regex pour extraire la sous-chaîne de la colonne pandas

J'ai des colonnes avec des valeurs comme celle-ci:

df['col1'] = df['col1'].str.extract('(\d+)/(\d+)/(\d+)', expand=True)

Et je dois extraire seulement 1/1/100 (de la première ligne) et ainsi de suite (1/1/102 ... )

J'utilise:

Col1

1/1/100 'BA1
1/1/102Packe
1/1/102 'to_

Mais je n'obtiens que 1.

Je ne sais pas pourquoi cela ne fonctionne pas, y a-t-il un problème avec regex ou j'ai besoin d'une sorte de mappage?


0 commentaires

3 Réponses :


2
votes

Vous ne devez utiliser qu'un seul groupe de capture:

>>> import pandas as pd
>>> df = pd.DataFrame({"col1":["1/1/100 'BA1", "1/1/102Packe", "1/1/102 'to_"]})
>>> df['col1'].str.extract('(\d+/\d+/\d+)', expand=True)
         0
0  1/1/100
1  1/1/102
2  1/1/102

La méthode str.extract renvoie la valeur capturée avec le premier groupe de capture, et votre regex capture le premier 1 dans ce groupe.

Test:

df['col1'] = df['col1'].str.extract('(\d+/\d+/\d+)', expand=True)
                                     ^           ^


0 commentaires

0
votes

vous pouvez également essayer ceci,

df['Col1']=df['Col1'].str.replace('\d+|/','')

Remarque: Regex est plus puissant que .str.replace .


0 commentaires

0
votes

Je suggère cette expression régulière:

df['col1'].str.extract('\b(\d/?)+', expand=True)


0 commentaires