In this short post, you'll see how to pretty print newlines inside the values in Pandas DataFrame. Brief example is included for demonstration purposes.

You can find the two ways below:

(1) Using df.to_html().replace

from IPython.display import display, HTML

display( HTML( df.to_html().replace("\\n","<br>")))

(2) By df.style.set_properties

display(df.style.set_properties(**{
    'text-align': 'left',
    'white-space': 'pre-wrap',
})

Suppose we have a DataFrame like:

name url url2
Softhints https://www.softhints.com https://www.blog.softhints.com/tag/pandas
DataScientyst https://datascientyst.com https://datascientyst.com/tag/pandas

Let's create new column which is concatenation of all others with separator a new line:

df['all'] = df['name'] + '\n' + df['url'] + '\n' + df['url2']

result:

url2 all
https://www.blog.softhints.com/tag/pandas Softhints\nhttps://www.softhints.com\nhttps://www.blog.softhints.com/tag/pandas
https://datascientyst.com/tag/pandas DataScientyst\nhttps://datascientyst.com\nhttps://datascientyst.com/tag/pandas

As you can see default print is showing the string values as a single line - ignoring the newlines.

df.to_html().replace

If you like to print newlines you need to use the following approach:

To print or display new lines inside columns in Pandas DataFrame you can: * convert the output to HTML

  • replace all new lines with <br> - HTML tag for new line
  • display the result as HTML
from IPython.display import display, HTML

display( HTML( df.to_html().replace("\\n","<br>") ) )

now all newlines symbols are printed or displayed in Jupyter cells correctly:

url2 all
0 https://www.blog.softhints.com/tag/pandas Softhints
https://www.softhints.com
https://www.blog.softhints.com/tag/pandas
1 https://datascientyst.com/tag/pandas DataScientyst
https://datascientyst.com
https://datascientyst.com/tag/pandas

You can define also a method like:

from IPython.display import display, HTML

def print_newlines(df):
    return display( HTML( df.to_html().replace("\\n","\<br\>") ) )

print_newlines(df)

df.style.set_properties

Alternative method is by changing Pandas properties:

  • white-space
  • text-align

Let say you would like to have newlines and centered values. Then you can use style.set_properties with the following values:

df.style.set_properties(**{
    'text-align': 'center',
    'white-space': 'pre-wrap',
})

Resources