本文翻译自:How do I expand the output display to see more columns of a pandas DataFrame?
Is there a way to widen the display of output in either interactive or script-execution mode? 有没有办法在交互式或脚本执行模式下扩大输出的显示?
Specifically, I am using the describe()
function on a pandas DataFrame
. 具体来说,我在熊猫DataFrame
上使用describe()
函数。 When the DataFrame
is 5 columns (labels) wide, I get the descriptive statistics that I want. 当DataFrame
为5列(标签)时,我得到了所需的描述性统计信息。 However, if the DataFrame
has any more columns, the statistics are suppressed and something like this is returned: 但是,如果DataFrame
有更多列,则统计信息将被抑制,并返回如下所示的内容:
>> Index: 8 entries, count to max
>> Data columns:
>> x1 8 non-null values
>> x2 8 non-null values
>> x3 8 non-null values
>> x4 8 non-null values
>> x5 8 non-null values
>> x6 8 non-null values
>> x7 8 non-null values
The "8" value is given whether there are 6 or 7 columns. 无论是6列还是7列,都会给出“ 8”值。 What does the "8" refer to? “ 8”是什么意思?
I have already tried dragging the IDLE window larger, as well as increasing the "Configure IDLE" width options, to no avail. 我已经尝试过将IDLE窗口拖动更大,以及增加“ Configure IDLE”宽度选项,但无济于事。
My purpose in using pandas and describe()
is to avoid using a second program like Stata to do basic data manipulation and investigation. 我使用pandas和describe()
是避免使用诸如Stata之类的第二个程序来进行基本的数据操作和调查。
参考:https://stackoom.com/question/n7g2/如何扩展输出显示以查看pandas-DataFrame的更多列
You can use print df.describe().to_string()
to force it to show the whole table. 您可以使用print df.describe().to_string()
强制其显示整个表。 (You can use to_string()
like this for any DataFrame. The result of describe
is just a DataFrame itself.) (你可以用to_string()
这样的任何数据帧。结果describe
仅仅是一个数据框本身)。
The 8 is the number of rows in the DataFrame holding the "description" (because describe
computes 8 statistics, min, max, mean, etc.). 8是保存“描述”的数据帧中的行数(因为describe
计算8个统计信息,最小值,最大值,平均值等)。
You can adjust pandas print options with set_printoptions
. 您可以使用set_printoptions
调整熊猫打印选项。
In [3]: df.describe()
Out[3]:
Index: 8 entries, count to max
Data columns:
x1 8 non-null values
x2 8 non-null values
x3 8 non-null values
x4 8 non-null values
x5 8 non-null values
x6 8 non-null values
x7 8 non-null values
dtypes: float64(7)
In [4]: pd.set_printoptions(precision=2)
In [5]: df.describe()
Out[5]:
x1 x2 x3 x4 x5 x6 x7
count 8.0 8.0 8.0 8.0 8.0 8.0 8.0
mean 69024.5 69025.5 69026.5 69027.5 69028.5 69029.5 69030.5
std 17.1 17.1 17.1 17.1 17.1 17.1 17.1
min 69000.0 69001.0 69002.0 69003.0 69004.0 69005.0 69006.0
25% 69012.2 69013.2 69014.2 69015.2 69016.2 69017.2 69018.2
50% 69024.5 69025.5 69026.5 69027.5 69028.5 69029.5 69030.5
75% 69036.8 69037.8 69038.8 69039.8 69040.8 69041.8 69042.8
max 69049.0 69050.0 69051.0 69052.0 69053.0 69054.0 69055.0
However this will not work in all cases as pandas detects your console width and it will only use to_string
if the output fits in the console (see the docstring of set_printoptions
). 但是,这并不是在所有情况下都可行,因为熊猫会检测到您的控制台宽度,并且仅在输出适合控制台时才使用to_string
(请参阅set_printoptions
的文档字符串)。 In this case you can explicitly call to_string
as answered by BrenBarn . 在这种情况下,你可以显式调用to_string
由作为回答BrenBarn 。
Update 更新资料
With version 0.10 the way wide dataframes are printed changed : 对于0.10版, 更改了宽数据帧的打印方式:
In [3]: df.describe()
Out[3]:
x1 x2 x3 x4 x5 \
count 8.000000 8.000000 8.000000 8.000000 8.000000
mean 59832.361578 27356.711336 49317.281222 51214.837838 51254.839690
std 22600.723536 26867.192716 28071.737509 21012.422793 33831.515761
min 31906.695474 1648.359160 56.378115 16278.322271 43.745574
25% 45264.625201 12799.540572 41429.628749 40374.273582 29789.643875
50% 56340.214856 18666.456293 51995.661512 54894.562656 47667.684422
75% 75587.003417 31375.610322 61069.190523 67811.893435 76014.884048
max 98136.474782 84544.484627 91743.983895 75154.587156 99012.695717
x6 x7
count 8.000000 8.000000
mean 41863.000717 33950.235126
std 38709.468281 29075.745673
min 3590.990740 1833.464154
25% 15145.759625 6879.523949
50% 22139.243042 33706.029946
75% 72038.983496 51449.893980
max 98601.190488 83309.051963
Further more the API for setting pandas options changed: 进一步更改了用于设置熊猫选项的API:
In [4]: pd.set_option('display.precision', 2)
In [5]: df.describe()
Out[5]:
x1 x2 x3 x4 x5 x6 x7
count 8.0 8.0 8.0 8.0 8.0 8.0 8.0
mean 59832.4 27356.7 49317.3 51214.8 51254.8 41863.0 33950.2
std 22600.7 26867.2 28071.7 21012.4 33831.5 38709.5 29075.7
min 31906.7 1648.4 56.4 16278.3 43.7 3591.0 1833.5
25% 45264.6 12799.5 41429.6 40374.3 29789.6 15145.8 6879.5
50% 56340.2 18666.5 51995.7 54894.6 47667.7 22139.2 33706.0
75% 75587.0 31375.6 61069.2 67811.9 76014.9 72039.0 51449.9
max 98136.5 84544.5 91744.0 75154.6 99012.7 98601.2 83309.1
Update: Pandas 0.23.4 onwards 更新:熊猫0.23.4起
This is not necessary, pandas autodetects the size of your terminal window if you set pd.options.display.width = 0
. 这不是必需的,如果设置pd.options.display.width = 0
,pandas会自动检测终端窗口的大小。 (For older versions see at bottom.) (有关较旧的版本,请参阅底部。)
pandas.set_printoptions(...)
is deprecated. 不推荐使用pandas.set_printoptions(...)
。 Instead, use pandas.set_option(optname, val)
, or equivalently pd.options.
. 而是使用pandas.set_option(optname, val)
或等效的pd.options.
。 Like: 喜欢:
import pandas as pd
pd.set_option('display.max_rows', 500)
pd.set_option('display.max_columns', 500)
pd.set_option('display.width', 1000)
Here is the help for set_option
: 这是set_option
的帮助 :
set_option(pat,value) - Sets the value of the specified option Available options: display.[chop_threshold, colheader_justify, column_space, date_dayfirst, date_yearfirst, encoding, expand_frame_repr, float_format, height, line_width, max_columns, max_colwidth, max_info_columns, max_info_rows, max_rows, max_seq_items, mpl_style, multi_sparse, notebook_repr_html, pprint_nest_depth, precision, width] mode.[sim_interactive, use_inf_as_null] Parameters ---------- pat - str/regexp which should match a single option. Note: partial matches are supported for convenience, but unless you use the full option name (e.g. x.y.z.option_name), your code may break in future versions if new options with similar names are introduced. value - new value of option. Returns ------- None Raises ------ KeyError if no such option exists display.chop_threshold: [default: None] [currently: None] : float or None if set to a float value, all float values smaller then the given threshold will be displayed as exactly 0 by repr and friends. display.colheader_justify: [default: right] [currently: right] : 'left'/'right' Controls the justification of column headers. used by DataFrameFormatter. display.column_space: [default: 12] [currently: 12]No description available. display.date_dayfirst: [default: False] [currently: False] : boolean When True, prints and parses dates with the day first, eg 20/01/2005 display.date_yearfirst: [default: False] [currently: False] : boolean When True, prints and parses dates with the year first, eg 2005/01/20 display.encoding: [default: UTF-8] [currently: UTF-8] : str/unicode Defaults to the detected encoding of the console. Specifies the encoding to be used for strings returned by to_string, these are generally strings meant to be displayed on the console. display.expand_frame_repr: [default: True] [currently: True] : boolean Whether to print out the full DataFrame repr for wide DataFrames across multiple lines, `max_columns` is still respected, but the output will wrap-around across multiple "pages" if it's width exceeds `display.width`. display.float_format: [default: None] [currently: None] : callable The callable should accept a floating point number and return a string with the desired format of the number. This is used in some places like SeriesFormatter. See core.format.EngFormatter for an example. display.height: [default: 60] [currently: 1000] : int Deprecated. (Deprecated, use `display.height` instead.) display.line_width: [default: 80] [currently: 1000] : int Deprecated. (Deprecated, use `display.width` instead.) display.max_columns: [default: 20] [currently: 500] : int max_rows and max_columns are used in __repr__() methods to decide if to_string() or info() is used to render an object to a string. In case python/IPython is running in a terminal this can be set to 0 and pandas will correctly auto-detect the width the terminal and swap to a smaller format in case all columns would not fit vertically. The IPython notebook, IPython qtconsole, or IDLE do not run in a terminal and hence it is not possible to do correct auto-detection. 'None' value means unlimited. display.max_colwidth: [default: 50] [currently: 50] : int The maximum width in characters of a column in the repr of a pandas data structure. When the column overflows, a "..." placeholder is embedded in the output. display.max_info_columns: [default: 100] [currently: 100] : int max_info_columns is used in DataFrame.info method to decide if per column information will be printed. display.max_info_rows: [default: 1690785] [currently: 1690785] : int or None max_info_rows is the maximum number of rows for which a frame will perform a null check on its columns when repr'ing To a console. The default is 1,000,000 rows. So, if a DataFrame has more 1,000,000 rows there will be no null check performed on the columns and thus the representation will take much less time to display in an interactive session. A value of None means always perform a null check when repr'ing. display.max_rows: [default: 60] [currently: 500] : int This sets the maximum number of rows pandas should output when printing out various output. For example, this value determines whether the repr() for a dataframe prints out fully or just a summary repr. 'None' value means unlimited. display.max_seq_items: [default: None] [currently: None] : int or None when pretty-printing a long sequence, no more then `max_seq_items` will be printed. If items are ommitted, they will be denoted by the addition of "..." to the resulting string. If set to None, the number of items to be printed is unlimited. display.mpl_style: [default: None] [currently: None] : bool Setting this to 'default' will modify the rcParams used by matplotlib to give plots a more pleasing visual style by default. Setting this to None/False restores the values to their initial value. display.multi_sparse: [default: True] [currently: True] : boolean "sparsify" MultiIndex display (don't display repeated elements in outer levels within groups) display.notebook_repr_html: [default: True] [currently: True] : boolean When True, IPython notebook will use html representation for pandas objects (if it is available). display.pprint_nest_depth: [default: 3] [currently: 3] : int Controls the number of nested levels to process when pretty-printing display.precision: [default: 7] [currently: 7] : int Floating point output precision (number of significant digits). This is only a suggestion display.width: [default: 80] [currently: 1000] : int Width of the display in characters. In case python/IPython is running in a terminal this can be set to None and pandas will correctly auto-detect the width. Note that the IPython notebook, IPython qtconsole, or IDLE do not run in a terminal and hence it is not possible to correctly detect the width. mode.sim_interactive: [default: False] [currently: False] : boolean Whether to simulate interactive mode for purposes of testing mode.use_inf_as_null: [default: False] [currently: False] : boolean True means treat None, NaN, INF, -INF as null (old way), False means None and NaN are null, but INF, -INF are not null (new way). Call def: pd.set_option(self, *args, **kwds)
EDIT: older version information, much of this has been deprecated. 编辑:较旧的版本信息,其中许多已被弃用。
As @bmu mentioned , pandas auto detects (by default) the size of the display area, a summary view will be used when an object repr does not fit on the display. 如@bmu 所述 ,pandas自动检测(默认情况下)显示区域的大小,当对象代表不适合显示时,将使用摘要视图。 You mentioned resizing the IDLE window, to no effect. 您提到了调整“ IDLE”窗口的大小,但没有任何效果。 If you do print df.describe().to_string()
does it fit on the IDLE window? 如果您确实print df.describe().to_string()
是否适合IDLE窗口?
The terminal size is determined by pandas.util.terminal.get_terminal_size()
(deprecated and removed), this returns a tuple containing the (width, height)
of the display. 终端大小由pandas.util.terminal.get_terminal_size()
确定(已弃用和移除),这将返回一个包含显示内容(width, height)
的元组。 Does the output match the size of your IDLE window? 输出是否与您的IDLE窗口的大小匹配? There might be an issue (there was one before when running a terminal in emacs). 可能存在问题(在emacs中运行终端之前有一个问题)。
Note that it is possible to bypass the autodetect, pandas.set_printoptions(max_rows=200, max_columns=10)
will never switch to summary view if number of rows, columns does not exceed the given limits. 请注意,可以绕过自动检测,如果行数,列数不超过给定的限制, pandas.set_printoptions(max_rows=200, max_columns=10)
将永远不会切换到摘要视图。
The 'max_colwidth' option helps in seeing untruncated form of each column. “ max_colwidth”选项有助于查看每列的截断形式。
Try this: 尝试这个:
pd.set_option('display.expand_frame_repr', False)
From the documentation: 从文档中:
display.expand_frame_repr : boolean display.expand_frame_repr:布尔值
Whether to print out the full DataFrame repr for wide DataFrames across multiple lines, max_columns is still respected, but the output will wrap-around across multiple “pages” if it's width exceeds display.width. 是否跨行输出宽数据帧的完整DataFrame repr,仍会考虑使用max_columns,但是如果宽度超过display.width,则输出将绕过多个“页面”。 [default: True] [currently: True] [默认:真] [当前:真]
See: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.set_option.html 请参阅: http : //pandas.pydata.org/pandas-docs/stable/generated/pandas.set_option.html
您可以设置输出显示以匹配您当前的端子宽度:
pd.set_option('display.width', pd.util.terminal.get_terminal_size()[0])