4
votes

Extraction de l'année et du mois à partir d'un champ de texte personnalisé

J'ai une base de données avec une colonne qui contient des informations sur le nombre d'années / de mois pendant lesquels la personne a un compte auprès de l'organisation.

Le champ est un format de texte personnalisé,

par exemple: «0yrs 11mon», «15yrs 4mon» etc.

Existe-t-il un moyen d'extraire simplement pour extraire les années et les mois dans une colonne séparée comme ci-dessous:

Member Since | Year | Mon
-------------------------

'0yrs 11mon' | 0 | 11 
-------------------------------------------

'15yrs 4mon' | 15 | 4
---------------------


0 commentaires

5 Réponses :


6
votes

Vous pouvez utiliser Series.str.extract :

df[['year','mon']]= df['Member Since'].str.extractall('(\d+)').unstack()
df
  Member Since  year    mon
0   0yrs 11mon   0      11
1   15yrs 4mon   15      4

le ?: est une notation de groupe non capturante. Ce qui signifie qu'il correspond à l'expression régulière mais ne capture pas dans la sortie

Vous pouvez également essayer Series.str.extractall :

df['Year'] = df['Member Since'].str.extract('(\d+)(?:yrs)')
df['Mon'] = df['Member Since'].str.extract('(?:\s)(\d+)(?:mon)')

La fonction extractall renvoie en fait un DataFrame avec une ligne pour chaque correspondance et une colonne pour chaque groupe et vous devez donc le désempiler.

Utilisez la méthode extraire tout uniquement si vous avez des nombres comme indiqué dans votre question. Plus ou moins de deux renverront une erreur.


2 commentaires

Merci Mohit .. L'extractall fonctionne, mais l'extrait ne fonctionne pas .. j'obtiens l'erreur "le modèle ne contient aucun groupe de capture"


Dans ce cas, utilisez (\d+)(?:yrs) et (?:\s)(\d+)(?:mon) . J'ai apporté les modifications à la réponse.



0
votes

Si vous avez les données dans Excel, cela pourrait fonctionner: -

import pandas as pd
data=pd.read_excel('filename')
month=data['Mon']  
year=data['Year']


0 commentaires

0
votes
  Member Since year month
0   0yrs 11mon    0    11
1   15yrs 4mon   15     4

0 commentaires

2
votes

Une alternative à Regex utilisant la solution str.extract serait,

df["Year"] = df["Member Since"].str.extract("(\d+)yrs")
df["Mon"] = df["Member Since"].str.extract("(\d+)mon")


0 commentaires

0
votes

Utilisation de str.findall

pd.DataFrame(df['Member Since'].str.findall('\d+').tolist(),columns=['Year','Mon'])
  Year Mon
0    0  11
1   15   4


0 commentaires