3
votes

Remplacement d'une chaîne dans un dataframe python

J'ai un (7,11000) dataframe. dans certaines de ces 7 colonnes, il y a des chaînes. Dans Coulmn 2 et ligne 1000, il y a une chaîne «Londres». Je veux le changer en «Paris». Comment puis-je faire ceci? J'ai cherché partout sur le Web mais je n'ai pas trouvé de moyen. J'ai utilisé ces commandes mais aucune d'elles ne fonctionne:

TypeError: expected string or bytes-like object

Je reçois généralement cette erreur:

df['column2'].replace('London','Paris')
df['column2'].str.replace('London','Paris')
re.sub('London','Paris',df['column2'])


1 commentaires

Veuillez ajouter les sorties de df.info () à cette question. Deuxièmement, lors de la description de la taille d'un dataframe, le modèle est généralement (lignes, colonnes). Donc, je pense que votre dataframe est (11000, 7). df ['column2'] = df ['column2']. replace (to_replace = 'London', value = 'Paris') devrait fonctionner.


3 Réponses :


3
votes

Si vous souhaitez remplacer une seule ligne (vous mentionnez la ligne 1000), vous pouvez le faire avec .loc . Si vous souhaitez remplacer toutes les occurrences de 'London' , vous pouvez le faire:

def replace_country(string):
    if string == 'London':
        return 'Paris'
    return string

df.country = df.country.apply(replace_country)

Vous pouvez également écrire votre propre fonction de remplacement, puis utiliser .apply :

import pandas as pd
df = pd.DataFrame({'country': ['New York', 'London'],})
df.country = df.country.str.replace('London', 'Paris')

La deuxième méthode est un peu exagérée, mais c'est un bon exemple qui se généralise mieux pour les tâches plus complexes.

p>


1 commentaires

Je n'ai pas utilisé RETURN: (((



0
votes

Avant de remplacer vérifier les non-caractères par re

import re
for r, map in re_map.items():
    df['column2'] = [re.sub(r, map, x) for x in df['column2']]


1 commentaires

Évitez les boucles for sur les dataframes à moins que cela ne soit absolument nécessaire. Ces opérations sont très lentes. Utilisez plutôt les fonctions intégrées.



0
votes

Ce sont toutes d'excellentes réponses, mais beaucoup ne sont pas vectorisées, fonctionnant sur chaque élément de la série une fois plutôt que de travailler sur la série entière.

Une stratégie de filtre + remplacement très fiable consiste à créer un masque ou un sous-ensemble de séries Vrai / Faux, puis d'utiliser loc avec cette série pour remplacer:

mask = df.country == 'London' 
df.loc[mask, 'country'] = 'Paris'

# On 10m records:
  # this method < 1 second 
  # @Charles method 1 < 10 seconds
  # @Charles method 2 < 3.5 seconds
  # @jose method didn't bother because it would be 30 seconds or more


0 commentaires