3

As an example:

import pandas as pd

df = pd.DataFrame({
  "Hello World": [1, 2, 3, 4],
  "And Some More": [10.0, 20.0, 30.0, 40.0],
})
df_caption = "Table 1: My Table"
df.style.set_caption(df_caption) # only works for HTML; https://stackoverflow.com/q/57958432

with pd.option_context('display.max_rows', None, 'display.max_columns', None, 'display.width', None, 'max_colwidth', 50, 'display.float_format', "{:.2f}".format):
  df_str = df.to_string()

print(df_str)

... outputs:

   Hello World  And Some More
0            1          10.00
1            2          20.00
2            3          30.00
3            4          40.00

... and clearly, there is no table title/caption in the plain text output of .to_string().

Sure I can just print(df_caption) myself separately - but is it otherwise somehow possible to add dataframe (table) caption on the Pandas DataFrame object, so that it is output in the string generated by .to_string()?

2 Answers 2

3

The definitive answer appears to be no, since to_string uses the very simple string template, which does not include the caption. Compare this to the latex or html table templates, which do include the caption explicitly.

Sign up to request clarification or add additional context in comments.

Comments

1
  1. DataFrame.style has a specific use that does not relate to printing DataFrames in the console. From the code documentation:

Contains methods for building a styled HTML representation of the DataFrame.

  1. DataFrame.to_string() has many attributes, but none of them relate to displaying a caption or a name. It does take a header, but that relates specifically to the column names.

  2. DataFrame.__repr__ uses DataFrame.to_string, so no captions here either.

In conclusion: it's not "possible to add dataframe (table) caption on the Pandas DataFrame object, so that it is output in the string generated by .to_string()".


You can, of course, create your own function to do that:

data = {
    "Name": ["Alice", "Bob", "Charlie", "David", "Emily"],
    "Age": [25, 30, 35, 40, 45],
    "City": ["New York", "Los Angeles", "Chicago", "Houston", "Boston"],
}

df = pd.DataFrame(data)


def print_df(df, name):
    print(df)
    print(f"{name = }")


print_df(df, name="Example DataFrame")
      Name  Age         City
0    Alice   25     New York
1      Bob   30  Los Angeles
2  Charlie   35      Chicago
3    David   40      Houston
4    Emily   45       Boston
name = 'Example DataFrame'

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.