大pandas,如何扩大输出显示看到更多的列?

有没有办法在交互式或脚本执行模式下扩大输出显示?

具体来说,我在pandasdataframe上使用describe()函数。 当dataframe是5列(标签)宽,我得到我想要的描述性统计。 但是,如果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 

无论有6列还是7列,都给出“8”值。 “8”是指什么?

我已经尝试拖动较大的空闲窗口,以及增加“configuration空闲”宽度选项,无济于事。

我使用Pandas和describe()的目的是避免使用像STATA这样的第二个程序来进行基本的数据操作和调查。

谢谢。

Python / IDLE 2.7.3
pandas0.8.1
Notepad ++ 6.1.4(UNICODE)
Windows Vista SP2

正如@bmu所提到的 ,pandas自动检测(默认情况下)显示区域的大小,当对象repr不适合显示时,将使用摘要视图。 你提到调整IDLE窗口,不起作用。 如果你print df.describe().to_string()它适合IDLE窗口?

terminal的大小由pandas.util.terminal.get_terminal_size()决定,返回一个包含显示(width, height)的元组。 输出是否与IDLE窗口的大小相匹配? 可能有一个问题(在emacs中运行一个terminal之前有一个问题)。

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


更新:pandas0.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) - 设置指定选项的值

可用选项:
显示[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,精度,宽度]
模式。[sim_interactive,use_inf_as_null]

参数
 ----------
 pat  -  str / regexp应该匹配一个选项。

注意:为方便起见,支持部分匹配,但除非您使用
完整的选项名称(egxyzoption_name),您的代码将来可能会中断
如果引入了类似名称的新选项,

价值 - 期权的新价值。

返回
 -------
没有

加薪
 ------
 KeyError如果不存在这样的选项

 display.chop_threshold:[默认:无] [当前:无]
 :浮动或无
        如果设置为浮点值,则所有浮点值都小于给定的阈值
        将被repr和朋友显示为0。
 display.colheader_justify:[默认:右] [当前:右]
 : '左右'
        控制列标题的理由。 由DataFrameFormatter使用。
 display.column_space:[默认:12] [当前:12]没有可用的描述。

 display.date_dayfirst:[默认:False] [目前:False]
 :布尔值
        如果为True,则打印并分析date,例如20/01/2005
 display.date_yearfirst:[默认:False] [目前:False]
 :布尔值
        如果设置为True,则打印并分析首年的date,例如2005/01/20
 display.encoding:[默认:UTF-8] [目前:UTF-8]
 :str / unicode
        默认为检测到的控制台编码。
        指定要由to_string返回的string使用的编码,
        这些通常是意味着在控制台上显示的string。
 display.expand_frame_repr:[默认:True] [当前:True]
 :布尔值
        是否打印出DataFrame的全部DataFrame repr
        跨多行,`max_columns`仍然受到尊重,但输出将会
        如果宽度超过“display.width”,则在多个“页面”中环绕。
 display.float_format:[默认:无] [目前:无]
 :可调用
        可调用应该接受一个浮点数并返回
        一个具有所需数字格式的string。 这是使用
        在一些像SeriesFormatter这样的地方。
        有关示例,请参阅core.format.EngFormatter。
 display.height:[默认:60] [目前:1000]
 :int
        已过时。
         (不推荐使用`display.height`代替。)

 display.line_width:[默认:80] [目前:1000]
 :int
        已过时。
         (不推荐使用`display.width`代替。)

 display.max_columns:[默认:20] [目前:500]
 :int
        在__repr __()方法中使用max_rows和max_columns来决定是否
         to_string()或info()用于将对象渲染为string。 以防万一
         python / IPython运行在terminal,可以设置为0和pandas
        将正确的自动检测terminal的宽度并交换到一个较小的
        格式的情况下,所有的列不适合垂直。  IPython笔记本,
         IPython qtconsole或IDLE不在terminal运行,因此它不是
        可能做正确的自动检测。
         “无”意味着无限。
 display.max_colwidth:[默认:50] [当前:50]
 :int
        在repr中的列的最大字符宽度
        一个pandas数据结构。 当列溢出时,“...”
        占位符embedded在输出中。
 display.max_info_columns:[默认:100] [目前:100]
 :int
        在DataFrame.info方法中使用max_info_columns来决定是否
        每列信息将被打印。
 display.max_info_rows:[默认:1690785] [当前:1690785]
 :int或None
         max_info_rows是一个帧所能达到的最大行数
        在重新安装到控制台时对其列执行空检查。
        默认值是1,000,000行。 所以,如果一个DataFrame有更多
         1,000,000行将不会执行空的检查
        列,因此代表将花费更less的时间
        在交互式会话中显示。 值的None意味着永远
        在重新生成时执行空检查。
 display.max_rows:[默认:60] [当前:500]
 :int
        这设置打印时pandas应该输出的最大行数
        出各种输出。 例如,这个值决定了repr()
        为一个dataframe打印完全或只是一个总结repr。
         “无”意味着无限。
 display.max_seq_items:[默认:无] [当前:无]
 :int或None

        当漂亮的打印一个长序列时,不要再用`max_seq_items`
        将被打印。 如果项目被忽略,它们将被添加表示
         “...”的结果string。

        如果设置为“无”,则要打印的项目数量不受限制。
 display.mpl_style:[默认:无] [目前:无]
 :布尔

        将其设置为“default”将修改matplotlib使用的rcParams
        默认情节下,让情节更加令人愉快的视觉风格。
        将其设置为None / False会将值恢复为初始值。
 display.multi_sparse:[默认:True] [当前:True]
 :布尔值
         “稀疏”MultiIndex显示(不显示重复
        元素在组内的外层)
 display.notebook_repr_html:[默认:True] [当前:True]
 :布尔值
        当为True时,IPython笔记本将使用html表示
        pandas物体(如果有的话)。
 display.pprint_nest_depth:[默认:3] [当前:3]
 :int
        控制漂亮打印时要处理的嵌套级别的数量
 display.precision:[默认:7] [目前:7]
 :int
        浮点输出精度(有效位数)。 这是
        只有一个build议
 display.width:[默认:80] [当前:1000]
 :int
        显示的字符宽度。 如果python / IPython正在运行
        一个terminal可以设置为无,pandas将正确自动检测
        宽度。
        请注意,IPython笔记本,IPython qtconsole或IDLE不在a中运行
        terminal,因此不可能正确地检测宽度。
 mode.sim_interactive:[默认:False] [目前:False]
 :布尔值
        是否为了testing目的而模拟交互模式
 mode.use_inf_as_null:[default:False] [当前:False]
 :布尔值
         True表示将None,NaN,INF,-INF视为null(旧方式),
         False表示无,NaN为空,但INF,-INF不为空
         (新方法)。
调用def:pd.set_option(self,* args,** kwds)

尝试这个:

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

从文档:

display.expand_frame_repr:boolean

无论是在多行上打印DataFrame的全部DataFrame再生产,max_columns仍然受到尊重,但是如果宽度超过display.width,则输出将在多个“页面”上环绕。 [默认:True] [当前:True]

请参阅: http : //pandas.pydata.org/pandas-docs/stable/generated/pandas.set_option.html

如果要临时设置选项以显示一个大的DataFrame,则可以使用option_context :

 with pd.option_context('display.max_rows', -1, 'display.max_columns', 5): print df 

当您退出with块时,选项值会自动恢复。

您可以使用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检测到控制台宽度,如果输出适合控制台,它将只使用to_string (请参阅set_printoptions的文档string)。 在这种情况下,可以通过BrenBarn回答显式调用to_string

更新

使用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 

此外更多用于设置“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 

您可以设置输出显示以匹配您当前的terminal宽度:

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

您可以使用print df.describe().to_string()强制显示整个表格。 (你可以像这样对任何DataFrame使用to_string() ,describe的结果只是一个DataFrame本身。)

8是DataFrame中包含“描述”的行数(因为describe计算了8个统计量,最小值,最大值,平均值等)。

设置列的最大宽度使用:

 pd.set_option('max_colwidth', 800) 

这个特定的语句将最大宽度设置为每列800像素。

根据v0.18.0的文档 ,如果你在一个terminal(即不是iPython笔记本,qtconsole或IDLE)上运行,那么Pandas可以自动检测你的屏幕宽度并且随时随地调整它显示的列:

 pd.set_option('display.large_repr', 'truncate') pd.set_option('display.max_columns', 0)