首页 文章

Python pandas,如何加宽输出显示以查看更多列?

提问于
浏览
309

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

具体来说,我在Pandas dataframe 上使用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”是指什么?

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

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

Python / IDLE 2.7.3
熊猫0.8.1
记事本6.1.4(UNICODE)
Windows Vista SP2

12 回答

  • 24

    作为@bmu mentioned,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) 将永远不会切换到摘要视图 .


    Update: Pandas 0.11.0 onwards

    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)
    

    这是help for 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)
    
  • 18

    试试这个:

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

    从文档:

    display.expand_frame_repr:boolean无论是跨多行打印出宽数据帧的完整DataFrame repr,max_columns仍然受到尊重,但如果宽度超过display.width,则输出将在多个“页面”上进行环绕 . [默认:True] [当前:True]

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

  • 4

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

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

    退出 with 块时会自动恢复选项值 .

  • 1

    使用以下方法设置列最大宽

    pd.set_option('max_colwidth', 800)
    

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

  • 32

    您可以使用 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 的文档字符串) . 在这种情况下,您可以显式调用 to_string 作为BrenBarn的答案 .

    Update

    对于版本0.10,打印宽数据帧的方式changed

    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
    
  • 17

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

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

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

    8是DataFrame中持有"description"的行数(因为 describe 计算8个统计数据,min,max,mean等) .

  • 23

    只使用这三条线为我工作:

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

    Anaconda / Python 3.6.5 / pandas:0.23.0 / Visual Studio Code 1.26

  • 433

    根据docs for v0.18.0,如果你是一个2-liner,让Pandas自动检测你的屏幕宽度,并在飞行中适应它显示的列数:

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

    似乎以上所有答案都解决了这个问题 . 还有一点:代替 pd.set_option('option_name') ,你可以使用(自动完成)

    pd.options.display.width = None
    

    Pandas doc: Options and Settings:

    选项具有完整的“点状样式”,不区分大小写的名称(例如display.max_rows) . 您可以直接获取/设置选项作为顶级选项属性的属性:在[1]中:将pandas导入为pd

    在[2]中:pd.options.display.max_rows
    出[2]:15

    在[3]中:pd.options.display.max_rows = 999

    在[4]中:pd.options.display.max_rows
    出[4]:999

    [...]

    对于 max_... 参数:

    max_rows和max_columns用于__repr __()方法,以决定是否使用to_string()或info()将对象呈现给字符串 . 如果python / IPython在终端中运行,则可以将其设置为0,并且pandas将正确地自动检测终端的宽度,并在所有列都不垂直的情况下交换为较小的格式 . IPython笔记本,IPython qtconsole或IDLE不在终端中运行,因此无法进行正确的自动检测 . '无' Value 意味着无限 . [重点不在原文]

    对于 width param:

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

  • 54

    我用过这些设置当数据规模很大时 .

    # 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)
    

    你可以参考文档here

  • 0
    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
    

相关问题