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

具体来说,我正在使用 describe() 在 pandas 上运行 DataFrame. 。当。。。的时候 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”指的是什么?

我已经尝试将 IDLE 窗口拖得更大,以及增加“配置 IDLE”宽度选项,但无济于事。

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

有帮助吗?

解决方案

更新:熊猫 0.23.4 及以上

这不是必需的,如果您设置,pandas 会自动检测终端窗口的大小 pd.options.display.width = 0. 。(对于旧版本,请参阅底部。)

pandas.set_printoptions(...) 已弃用。相反,使用 pandas.set_option(optname, val), ,或等价地 pd.options.<opt.hierarchical.name> = val. 。喜欢:

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

这里是 帮助 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)

编辑:旧版本信息,其中大部分已被弃用。

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

终端尺寸由下式确定 pandas.util.terminal.get_terminal_size() (已弃用并删除),这将返回一个包含 (width, height) 显示器的。输出与 IDLE 窗口的大小匹配吗?可能存在问题(之前在 emacs 中运行终端时曾出现过问题)。

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


“max_colwidth”选项有助于查看每列的未截断形式。

TruncatedColumnDisplay

其他提示

尝试这个:

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

从文档中:

显示.expand_frame_repr :布尔值

是否打印跨多行的宽 DataFrame 的完整 DataFrame 表示,max_columns 仍然受到尊重,但如果宽度超过 display.width,输出将环绕多个“页面”。[默认:正确] [目前:真的]

看: http://pandas.pydata.org/pandas-docs/stable/ generated/pandas.set_option.html

如果你想临时设置选项来显示一个大的DataFrame,你可以使用 选项上下文:

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

退出时选项值会自动恢复 with 堵塞。

仅使用这 3 行对我有用:

pd.set_option('display.max_columns', None)  
pd.set_option('display.expand_frame_repr', False)
pd.set_option('max_colwidth', -1)

蟒蛇/Python 3.6.5/熊猫:0.23.0 / Visual Studio 代码 1.26

使用以下命令设置列最大宽度:

pd.set_option('max_colwidth', 800)

此特定语句将每列的最大宽度设置为 800px。

您可以使用以下命令调整 pandas 打印选项 set_printoptions.

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)。在这种情况下,您可以显式调用 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

您可以使用 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])

根据 v0.18.0 的文档, ,如果您在终端上运行(即不是 iPython 笔记本、qtconsole 或 IDLE),则 Pandas 会自动检测您的屏幕宽度并动态调整显示的列数,这是一个 2 行代码:

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

看来以上所有答案都解决了问题。还有一点:代替 pd.set_option('option_name'), ,您可以使用(自动完成功能)

pd.options.display.width = None

熊猫文档:选项和设置:

选项有一个完整的“点式”、不区分大小写的名称(例如 display.max_rows)。您可以直接获得/设置选项作为顶级的属性 options 属性:

In [1]: import pandas as pd

In [2]: pd.options.display.max_rows
Out[2]: 15

In [3]: pd.options.display.max_rows = 999

In [4]: pd.options.display.max_rows
Out[4]: 999

[...]

为了 max_... 参数:

max_rowsmax_columns 用于 __repr__() 方法来决定是否 to_string() 或者 info() 用于将对象渲染为字符串。如果 python/IPython 在终端中运行,则可以将其设置为 0,并且 pandas 将正确自动检测终端的宽度并交换到较小的格式,以防所有列都无法垂直放置。IPython Notebook、IPython qtconsole 或 IDLE 不在终端中运行,因此无法进行正确的自动检测。 None’价值意味着无限。 [强调不是原文]

为了 width 参数:

显示宽度(以字符为单位)。如果 python/IPython 在终端中运行,可以将其设置为 None pandas 将正确自动检测宽度。请注意,IPython Notebook、IPython qtconsole 或 IDLE 不在终端中运行,因此无法正确检测宽度。

import pandas as pd
pd.set_option('display.max_columns', 100)
pd.set_option('display.width', 1000)

SentenceA = "William likes Piano and Piano likes William"
SentenceB = "Sara likes Guitar"
SentenceC = "Mamoosh likes Piano"
SentenceD = "William is a CS Student"
SentenceE = "Sara is kind"
SentenceF = "Mamoosh is kind"


bowA = SentenceA.split(" ")
bowB = SentenceB.split(" ")
bowC = SentenceC.split(" ")
bowD = SentenceD.split(" ")
bowE = SentenceE.split(" ")
bowF = SentenceF.split(" ")

# Creating a set consisted of all words

wordSet = set(bowA).union(set(bowB)).union(set(bowC)).union(set(bowD)).union(set(bowE)).union(set(bowF))
print("Set of all words is: ", wordSet)

# Initiating dictionary with 0 value for all BOWs

wordDictA = dict.fromkeys(wordSet, 0)
wordDictB = dict.fromkeys(wordSet, 0)
wordDictC = dict.fromkeys(wordSet, 0)
wordDictD = dict.fromkeys(wordSet, 0)
wordDictE = dict.fromkeys(wordSet, 0)
wordDictF = dict.fromkeys(wordSet, 0)

for word in bowA:
    wordDictA[word] += 1
for word in bowB:
    wordDictB[word] += 1
for word in bowC:
    wordDictC[word] += 1
for word in bowD:
    wordDictD[word] += 1
for word in bowE:
    wordDictE[word] += 1
for word in bowF:
    wordDictF[word] += 1

# Printing Term frequency

print("SentenceA TF: ", wordDictA)
print("SentenceB TF: ", wordDictB)
print("SentenceC TF: ", wordDictC)
print("SentenceD TF: ", wordDictD)
print("SentenceE TF: ", wordDictE)
print("SentenceF TF: ", wordDictF)

print(pd.DataFrame([wordDictA, wordDictB, wordDictB, wordDictC, wordDictD, wordDictE, wordDictF]))

输出:

   CS  Guitar  Mamoosh  Piano  Sara  Student  William  a  and  is  kind  likes
0   0       0        0      2     0        0        2  0    1   0     0      2
1   0       1        0      0     1        0        0  0    0   0     0      1
2   0       1        0      0     1        0        0  0    0   0     0      1
3   0       0        1      1     0        0        0  0    0   0     0      1
4   1       0        0      0     0        1        1  1    0   1     0      0
5   0       0        0      0     1        0        0  0    0   1     1      0
6   0       0        1      0     0        0        0  0    0   1     1      0

当数据规模较大时,我使用了这些设置。

# environment settings: 
pd.set_option('display.max_column',None)
pd.set_option('display.max_rows',None)
pd.set_option('display.max_seq_items',None)
pd.set_option('display.max_colwidth', 500)
pd.set_option('expand_frame_repr', True)

你可以参考文档这里

如果您不想弄乱显示选项,而只想查看这一特定的列列表,而不展开您查看的每个数据框,您可以尝试:

df.columns.values

您也可以循环尝试:

for col in df.columns: 
    print(col) 

下面的行足以显示数据框中的所有列。 pd.set_option('display.max_columns', None)

您可以简单地执行以下步骤,

  • 您可以更改 pandas max_columns 功能的选项,如下所示

    import pandas as pd
    pd.options.display.max_columns = 10
    

    (这允许显示 10 列,您可以根据需要更改此值)

  • 就像这样,您可以更改需要显示的行数,如下所示(如果您还需要更改最大行数)

    pd.options.display.max_rows = 999
    

    (这允许一次打印 999 行)

请参考 文档 更改 pandas 的不同选项/设置

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top