Replace all occurrences of a string in a pandas dataframe (Python)

101,033

Solution 1

You can use replace and pass the strings to find/replace as dictionary keys/items:

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

For example:

>>> 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>

Solution 2

It seems Pandas has change its API to avoid ambiguity when handling regex. Now you should use:

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

For example:

>>> 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>

Solution 3

You can iterate over all columns and use the method str.replace:

for col in df.columns:
   df[col] = df[col].str.replace('\n', '<br>')

This method uses regex by default.

Share:
101,033
nauti
Author by

nauti

Updated on August 04, 2021

Comments

  • nauti
    nauti almost 3 years

    I have a pandas dataframe with about 20 columns.

    It is possible to replace all occurrences of a string (here a newline) by manually writing all column names:

    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>")
    

    This unfortunately does not work:

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

    Is there any other, more elegant solution?