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?
3 Réponses :
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)
^ ^
vous pouvez également essayer ceci,
df['Col1']=df['Col1'].str.replace('\d+|/','')
Remarque: Regex est plus puissant que .str.replace .
Je suggère cette expression régulière:
df['col1'].str.extract('\b(\d/?)+', expand=True)