如何擴展輸出顯示以查看pandas DataFrame的更多列?

本文翻譯自: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之類的第二個程序來進行基本的數據操作和調查。


#1樓

參考:https://stackoom.com/question/n7g2/如何擴展輸出顯示以查看pandas-DataFrame的更多列


#2樓

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個統計信息,最小值,最大值,平均值等)。


#3樓

You can adjust pandas print options with set_printoptions . 您可以使用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

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

#4樓

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.<opt.hierarchical.name> = val . 而是使用pandas.set_option(optname, val)或等效的pd.options.<opt.hierarchical.name> = val 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”選項有助於查看每列的截斷形式。

截斷的列顯示


#5樓

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


#6樓

您可以設置輸出顯示以匹配您當前的端子寬度:

pd.set_option('display.width', pd.util.terminal.get_terminal_size()[0])
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章