DataFrame.to_markdown(buf=None, *, mode='wt', index=True, storage_options=None, **kwargs)[source]#

Print DataFrame in Markdown-friendly format.

bufstr, Path or StringIO-like, optional, default None

Buffer to write to. If None, the output is returned as a string.

modestr, optional

Mode in which file is opened, “wt” by default.

indexbool, optional, default True

Add index (row) labels.

storage_optionsdict, optional

Extra options that make sense for a particular storage connection, e.g. host, port, username, password, etc. For HTTP(S) URLs the key-value pairs are forwarded to urllib.request.Request as header options. For other URLs (e.g. starting with “s3://”, and “gcs://”) the key-value pairs are forwarded to Please see fsspec and urllib for more details, and for more examples on storage options refer here.


These parameters will be passed to tabulate.


DataFrame in Markdown-friendly format.

See also


Render DataFrame to HTML-formatted table.


Render DataFrame to LaTeX-formatted table.


Requires the tabulate package.


>>> df = pd.DataFrame(
...     data={"animal_1": ["elk", "pig"], "animal_2": ["dog", "quetzal"]}
... )
>>> print(df.to_markdown())
|    | animal_1   | animal_2   |
|  0 | elk        | dog        |
|  1 | pig        | quetzal    |

Output markdown with a tabulate option.

>>> print(df.to_markdown(tablefmt="grid"))
|    | animal_1   | animal_2   |
|  0 | elk        | dog        |
|  1 | pig        | quetzal    |