0
votes

Remplacez les sous-chaînes exactes dans une colonne en fonction d'une table / liste / Dataframe dans Python

J'ai un dataframe Pandas DF, où une colonne a une chaîne dedans: xxx pré>

et j'ai un autre Dataframe, où j'ai les nouvelles chaînes: p>

df = pd.DataFrame(data=['PSX - Judge A::PSK-Ama',
                        'VSC - Jep::VSC-Da',
                        'VSO - Jep::VSO-Da'], columns=['columnA'])
replace = pd.DataFrame(data=[['PSX', 'PCC'],
                             ['VSO', 'VVV']], columns=['old', 'new'])


5 commentaires

Que diriez-vous d'une boucle?


Hm..any vectoriser une solution?


C'est toujours un remplaçant un seul mot?


Pourquoi n'avez-vous pas impliqué "un autre Dataframe"? Quel est le sens de la mentionner?


C'est toujours ce type de remplacement, donc un mot simple oui


3 Réponses :


1
votes
for row in df_map.iterrows():
    df['columnA'] = df.replace(row[0], row[1], regex=True)
Where df_map is your mapping DataFrame. 

1 commentaires

Cela prend 9,5315 secondes dans mon cas (seulement mesuré une fois)



1
votes

Vous pouvez utiliser le fait que le paramètre de remplacement peut être une fonction: xxx

sortie xxx

L'idée est d'extraire les mots dans Columna et s'il correspond à une dans la recherche, remplacez-le. Ceci est inspiré par ce Réponse , dans lequel le marquage de banc montre que cela est l'approche la plus compétitive. < / p>


1 commentaires

Cela prend 1,26359 secondes dans mon cas (seulement mesuré une fois)



1
votes

Vous pouvez créer un "dictionnaire de remplacement" de votre deuxième Dataframe, puis itérer sur les touches et les valeurs et utilisez quant à eux que str.replace code>. Cette solution devrait être assez rapide:

                  columnA
0  PCC - Judge A::PSK-Ama
1       VSC - Jep::VSC-Da
2       VVV - Jep::VVV-Da


1 commentaires

Cela prend 3,5880 secondes dans mon cas (seulement mesuré une fois)