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?
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>
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>
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)]