J'ai une liste de noms dans laquelle j'ai mis toutes les majuscules, les espaces supprimés et les caractères non alphabétiques pour les fusionner plus facilement avec une autre liste - les deux sont dans le cadre de données pandas.
Un des noms du dataframe a des noms avec JR attaché à la fin tandis que leurs homologues dans l'autre dataframe ne contiennent pas ce suffixe. Comment puis-je supprimer tous les JR des deux?
J'ai essayé quelque chose comme ce qui suit:
df ['NAME'] = df ['NAME']. str.replace ('JR', '')
mais je pense que cela supprimerait toutes les instances de JR et pas quand il s'agit des 2 derniers caractères. Toute aide serait appréciée.
3 Réponses :
Vous pouvez utiliser remplacer par une expression régulière:
name 0 Name 1 Name JR Middle 2 JR Name
Sortie
import pandas as pd df = pd.DataFrame(data=['Name JR', 'Name JR Middle', 'JR Name'], columns=['name']) df['name'] = df.name.str.replace(r'\bJR$', '', regex=True).str.strip() print(df)
Le modèle '\ bJR $' correspond au mot JR uniquement à la fin de la chaîne.
Vous avez besoin de:
def jr_replace(x):
match = re.sub(r'JR$',"",x)
return match
df['NAME'] = df['NAME'].apply(jr_replace)
print(df)
Une option consiste à supprimer JR en utilisant string.endswith et à le supprimer des lignes qui le contiennent en coupant l'objet str : XXX
Exemple
Utilisation du dataframe de @ danielmesejo:
df = pd.DataFrame(data=['Name JR', 'Name JR Middle', 'JR Name'], columns=['name'])
m = df.name.str.endswith('JR')
df.name.loc[m] = df.name.loc[m].str[:-2]
name
0 Name
1 Name JR Middle
2 JR Name
Que diriez-vous de:
df ['NAME'] = df ['NAME']. Apply (lambda x: x [: - 2] if x.endswith ('JR') else x)