pandas - python Pandas,扩大输出显示?

是否可以通过交互式或脚本执行模式扩大输出的显示范围?

具体来说,我在Pandas数据框上使用describe函数,但是,如果数据帧中有更多列,则统计信息将被挡住了,并返回如下所示的内容:


>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 

我已经尝试拖动窗口,以及增加"Configure IDLE"宽度选项,还是无法使用。

谢谢

Python /IDLE 2.7.3
Pandas 0.8.1
NotePad++ 6.1.4 (UNICODE )
Windows Vista SP2

时间:

pandas自动检测(默认情况下)显示区域的大小,当对象代表不适合显示时,将使用摘要视图,如果你做了print df.describe().to_string(),它是否适合IDLE窗口?

终端大小由 pandas.util.terminal.get_terminal_size(),这将返回一个包含显示的(width, height)的元组,输出是否与IDLE窗口的大小相匹配?

请注意,可以绕过自动检测功能,pandas.set_printoptions(max_rows=200, max_columns=10)如果行数不超过给定的限制,则永远不会切换到摘要视图。


更新:Pandas 0.11.0开始

pandas.set_printoptions(...)已经弃用,使用pandas.set_option


import pandas as pd
pd.set_option('display.height', 1000)
pd.set_option('display.max_rows', 500)
pd.set_option('display.max_columns', 500)
pd.set_option('display.width', 1000)

以下是帮助:

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)

你可以使用set_printoptions调整Pandas打印选项。


In [3]: df.describe()
Out[3]: 
<class 'pandas.core.frame.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
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

但是,在Pandas检测控制台宽度时,这将不起作用,如果输出符合控制台(请参阅set_printoptions的文档字符串),则只使用to_string

更新

使用0.10版,dataframes的打印方式已更改 :


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 

设置Pandas选项的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

尝试这个:


pd.set_option('display.expand_frame_repr', False)

文档:

display.expand_frame_repr :布尔值

是否跨多行打印宽数据帧的完整DataFrame repr,考虑使用max_columns,但是如果宽度超过显示宽度,则输出将在多个“页面中环绕,[默认:True][当前:True]

你可以使用 print df.describe().to_string() 强制它显示整个表格。 ( 你可以将 to_string() 用于任何 DataFrame 。 describe的结果只是一个DataFrame本身。

8是DataFrame中包含"说明"的行数( 因为 describe 计算 8统计,最小值,最大值,等等 ) 。

可以将输出显示设置为与当前终端宽度匹配:


pd.set_option('display.width', pd.util.terminal.get_terminal_size()[0])

...