4
votes

Supprimer certains caractères si à la fin de la chaîne dans Pandas

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.


1 commentaires

Que diriez-vous de: df ['NAME'] = df ['NAME']. Apply (lambda x: x [: - 2] if x.endswith ('JR') else x)


3 Réponses :


4
votes

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.


0 commentaires

2
votes

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)


0 commentaires

1
votes

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


0 commentaires