web-dev-qa-db-fra.com

Remplacer toutes les occurrences d'une chaîne dans un pandas dataframe (Python)

J'ai un pandas dataframe avec environ 20 colonnes).

Il est possible de remplacer toutes les occurrences d'une chaîne (ici une nouvelle ligne) en écrivant manuellement tous les noms de colonnes:

df['columnname1'] = df['columnname1'].str.replace("\n","<br>")
df['columnname2'] = df['columnname2'].str.replace("\n","<br>")
df['columnname3'] = df['columnname3'].str.replace("\n","<br>")
...
df['columnname20'] = df['columnname20'].str.replace("\n","<br>")

Cela ne fonctionne malheureusement pas:

df = df.replace("\n","<br>")

Existe-t-il une autre solution plus élégante?

37
nauti

Vous pouvez utiliser replace et transmettre les chaînes pour rechercher/remplacer en tant que clés/éléments de dictionnaire:

df.replace({'\n': '<br>'}, regex=True)

Par exemple:

>>> df = pd.DataFrame({'a': ['1\n', '2\n', '3'], 'b': ['4\n', '5', '6\n']})
>>> df
   a    b
0  1\n  4\n
1  2\n  5
2  3    6\n

>>> df.replace({'\n': '<br>'}, regex=True)
   a      b
0  1<br>  4<br>
1  2<br>  5
2  3      6<br>
69
Alex Riley

Il semble que Pandas ait modifié son API pour éviter toute ambiguïté lors de la gestion des regex. Vous devez maintenant utiliser:

df.replace({'\n': '<br>'}, regex=True)

Par exemple:

>>> df = pd.DataFrame({'a': ['1\n', '2\n', '3'], 'b': ['4\n', '5', '6\n']})
>>> df
   a    b
0  1\n  4\n
1  2\n  5
2  3    6\n

>>> df.replace({'\n': '<br>'}, regex=True)
   a      b
0  1<br>  4<br>
1  2<br>  5
2  3      6<br>
14
Yichuan Wang

Cela supprimera toutes les nouvelles lignes et les espaces inutiles. Vous pouvez éditer le '' .join pour spécifier un caractère de remplacement

    df['columnname'] = [''.join(c.split()) for c in df['columnname'].astype(str)]
0
Jasper Kinoti