{{ header }}
pandas has an options API configure and customize global behavior related to :class:`DataFrame` display, data behavior and more.
Options have a full "dotted-style", case-insensitive name (e.g. display.max_rows
).
You can get/set options directly as attributes of the top-level options
attribute:
.. ipython:: python import pandas as pd pd.options.display.max_rows pd.options.display.max_rows = 999 pd.options.display.max_rows
The API is composed of 5 relevant functions, available directly from the pandas
namespace:
- :func:`~pandas.get_option` / :func:`~pandas.set_option` - get/set the value of a single option.
- :func:`~pandas.reset_option` - reset one or more options to their default value.
- :func:`~pandas.describe_option` - print the descriptions of one or more options.
- :func:`~pandas.option_context` - execute a codeblock with a set of options that revert to prior settings after execution.
Note
Developers can check out pandas/core/config_init.py for more information.
All of the functions above accept a regexp pattern (re.search
style) as an argument,
to match an unambiguous substring:
.. ipython:: python pd.get_option("display.chop_threshold") pd.set_option("display.chop_threshold", 2) pd.get_option("display.chop_threshold") pd.set_option("chop", 4) pd.get_option("display.chop_threshold")
The following will not work because it matches multiple option names, e.g.
display.max_colwidth
, display.max_rows
, display.max_columns
:
.. ipython:: python :okexcept: pd.get_option("max")
Warning
Using this form of shorthand may cause your code to break if new options with similar names are added in future versions.
.. ipython:: python :suppress: :okwarning: pd.reset_option("all")
You can get a list of available options and their descriptions with :func:`~pandas.describe_option`. When called with no argument :func:`~pandas.describe_option` will print out the descriptions for all available options.
.. ipython:: python pd.describe_option()
As described above, :func:`~pandas.get_option` and :func:`~pandas.set_option`
are available from the pandas namespace. To change an option, call
set_option('option regex', new_value)
.
.. ipython:: python pd.get_option("mode.sim_interactive") pd.set_option("mode.sim_interactive", True) pd.get_option("mode.sim_interactive")
Note
The option 'mode.sim_interactive'
is mostly used for debugging purposes.
You can use :func:`~pandas.reset_option` to revert to a setting's default value
.. ipython:: python :suppress: pd.reset_option("display.max_rows")
.. ipython:: python pd.get_option("display.max_rows") pd.set_option("display.max_rows", 999) pd.get_option("display.max_rows") pd.reset_option("display.max_rows") pd.get_option("display.max_rows")
It's also possible to reset multiple options at once (using a regex):
.. ipython:: python :okwarning: pd.reset_option("^display")
:func:`~pandas.option_context` context manager has been exposed through
the top-level API, allowing you to execute code with given option values. Option values
are restored automatically when you exit the with
block:
.. ipython:: python with pd.option_context("display.max_rows", 10, "display.max_columns", 5): print(pd.get_option("display.max_rows")) print(pd.get_option("display.max_columns")) print(pd.get_option("display.max_rows")) print(pd.get_option("display.max_columns"))
Using startup scripts for the Python/IPython environment to import pandas and set options makes working with pandas more efficient.
To do this, create a .py
or .ipy
script in the startup directory of the desired profile.
An example where the startup folder is in a default IPython profile can be found at:
$IPYTHONDIR/profile_default/startup
More information can be found in the IPython documentation. An example startup script for pandas is displayed below:
import pandas as pd
pd.set_option("display.max_rows", 999)
pd.set_option("display.precision", 5)
The following is a demonstrates the more frequently used display options.
display.max_rows
and display.max_columns
sets the maximum number
of rows and columns displayed when a frame is pretty-printed. Truncated
lines are replaced by an ellipsis.
.. ipython:: python df = pd.DataFrame(np.random.randn(7, 2)) pd.set_option("display.max_rows", 7) df pd.set_option("display.max_rows", 5) df pd.reset_option("display.max_rows")
Once the display.max_rows
is exceeded, the display.min_rows
options
determines how many rows are shown in the truncated repr.
.. ipython:: python pd.set_option("display.max_rows", 8) pd.set_option("display.min_rows", 4) # below max_rows -> all rows shown df = pd.DataFrame(np.random.randn(7, 2)) df # above max_rows -> only min_rows (4) rows shown df = pd.DataFrame(np.random.randn(9, 2)) df pd.reset_option("display.max_rows") pd.reset_option("display.min_rows")
display.expand_frame_repr
allows for the representation of a
:class:`DataFrame` to stretch across pages, wrapped over the all the columns.
.. ipython:: python df = pd.DataFrame(np.random.randn(5, 10)) pd.set_option("expand_frame_repr", True) df pd.set_option("expand_frame_repr", False) df pd.reset_option("expand_frame_repr")
display.large_repr
displays a :class:`DataFrame` that exceed
max_columns
or max_rows
as a truncated frame or summary.
.. ipython:: python df = pd.DataFrame(np.random.randn(10, 10)) pd.set_option("display.max_rows", 5) pd.set_option("large_repr", "truncate") df pd.set_option("large_repr", "info") df pd.reset_option("large_repr") pd.reset_option("display.max_rows")
display.max_colwidth
sets the maximum width of columns. Cells
of this length or longer will be truncated with an ellipsis.
.. ipython:: python df = pd.DataFrame( np.array( [ ["foo", "bar", "bim", "uncomfortably long string"], ["horse", "cow", "banana", "apple"], ] ) ) pd.set_option("max_colwidth", 40) df pd.set_option("max_colwidth", 6) df pd.reset_option("max_colwidth")
display.max_info_columns
sets a threshold for the number of columns
displayed when calling :meth:`~pandas.DataFrame.info`.
.. ipython:: python df = pd.DataFrame(np.random.randn(10, 10)) pd.set_option("max_info_columns", 11) df.info() pd.set_option("max_info_columns", 5) df.info() pd.reset_option("max_info_columns")
display.max_info_rows
: :meth:`~pandas.DataFrame.info` will usually show null-counts for each column.
For a large :class:`DataFrame`, this can be quite slow. max_info_rows
and max_info_cols
limit this null check to the specified rows and columns respectively. The :meth:`~pandas.DataFrame.info`
keyword argument null_counts=True
will override this.
.. ipython:: python df = pd.DataFrame(np.random.choice([0, 1, np.nan], size=(10, 10))) df pd.set_option("max_info_rows", 11) df.info() pd.set_option("max_info_rows", 5) df.info() pd.reset_option("max_info_rows")
display.precision
sets the output display precision in terms of decimal places.
.. ipython:: python df = pd.DataFrame(np.random.randn(5, 5)) pd.set_option("display.precision", 7) df pd.set_option("display.precision", 4) df
display.chop_threshold
sets the rounding threshold to zero when displaying a
:class:`Series` or :class:`DataFrame`. This setting does not change the
precision at which the number is stored.
.. ipython:: python df = pd.DataFrame(np.random.randn(6, 6)) pd.set_option("chop_threshold", 0) df pd.set_option("chop_threshold", 0.5) df pd.reset_option("chop_threshold")
display.colheader_justify
controls the justification of the headers.
The options are 'right'
, and 'left'
.
.. ipython:: python df = pd.DataFrame( np.array([np.random.randn(6), np.random.randint(1, 9, 6) * 0.1, np.zeros(6)]).T, columns=["A", "B", "C"], dtype="float", ) pd.set_option("colheader_justify", "right") df pd.set_option("colheader_justify", "left") df pd.reset_option("colheader_justify")
pandas also allows you to set how numbers are displayed in the console.
This option is not set through the set_options
API.
Use the set_eng_float_format
function
to alter the floating-point formatting of pandas objects to produce a particular
format.
.. ipython:: python import numpy as np pd.set_eng_float_format(accuracy=3, use_eng_prefix=True) s = pd.Series(np.random.randn(5), index=["a", "b", "c", "d", "e"]) s / 1.0e3 s / 1.0e6
.. ipython:: python :suppress: :okwarning: pd.reset_option("^display")
Use :meth:`~pandas.DataFrame.round` to specifically control rounding of an individual :class:`DataFrame`
Warning
Enabling this option will affect the performance for printing of DataFrame and Series (about 2 times slower). Use only when it is actually required.
Some East Asian countries use Unicode characters whose width corresponds to two Latin characters. If a DataFrame or Series contains these characters, the default output mode may not align them properly.
.. ipython:: python df = pd.DataFrame({"国籍": ["UK", "日本"], "名前": ["Alice", "しのぶ"]}) df
Enabling display.unicode.east_asian_width
allows pandas to check each character's "East Asian Width" property.
These characters can be aligned properly by setting this option to True
. However, this will result in longer render
times than the standard len
function.
.. ipython:: python pd.set_option("display.unicode.east_asian_width", True) df
In addition, Unicode characters whose width is "ambiguous" can either be 1 or 2 characters wide depending on the
terminal setting or encoding. The option display.unicode.ambiguous_as_wide
can be used to handle the ambiguity.
By default, an "ambiguous" character's width, such as "¡" (inverted exclamation) in the example below, is taken to be 1.
.. ipython:: python df = pd.DataFrame({"a": ["xxx", "¡¡"], "b": ["yyy", "¡¡"]}) df
Enabling display.unicode.ambiguous_as_wide
makes pandas interpret these characters' widths to be 2.
(Note that this option will only be effective when display.unicode.east_asian_width
is enabled.)
However, setting this option incorrectly for your terminal will cause these characters to be aligned incorrectly:
.. ipython:: python pd.set_option("display.unicode.ambiguous_as_wide", True) df
.. ipython:: python :suppress: pd.set_option("display.unicode.east_asian_width", False) pd.set_option("display.unicode.ambiguous_as_wide", False)
:class:`DataFrame` and :class:`Series` will publish a Table Schema representation
by default. This can be enabled globally with the
display.html.table_schema
option:
.. ipython:: python pd.set_option("display.html.table_schema", True)
Only 'display.max_rows'
are serialized and published.
.. ipython:: python :suppress: pd.reset_option("display.html.table_schema")