出力表示を展開して、pandas DataFrameの列をさらに表示するにはどうすればよいですか?


623

対話モードまたはスクリプト実行モードで出力の表示を広げる方法はありますか?

具体的にはdescribe()、パンダでこの関数を使用しています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  

「8」の値は、列が6つあるか7つあるかを示します。「8」は何を意味しますか?

私はすでにIDLEウィンドウを大きくドラッグし、「IDLEの構成」幅オプションを増やして、役に立たないようにしました。

パンダを使用する私の目的は、describe()基本的なデータ操作と調査を行うためにStataのような2番目のプログラムを使用しないようにすることです。

回答:


890

更新:Pandas 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)-指定したオプションの値を設定します

利用可能なオプション:
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、精度、幅]
mode。[sim_interactive、use_inf_as_null]

パラメーター
----------
pat-str / regexpは、単一のオプションと一致する必要があります。

注:部分一致は便宜上サポートされていますが、
完全なオプション名(egxyzoption_name)、コードは将来壊れる可能性があります
類似した名前の新しいオプションが導入された場合のバージョン。

value-オプションの新しい値。

戻り値
-------
無し

上げる
------
そのようなオプションが存在しない場合のKeyError

display.chop_threshold:[デフォルト:なし] [現在:なし]
:floatまたはNone
        float値に設定されている場合、すべてのfloat値は指定されたしきい値よりも小さい
        reprや友達からは正確に0と表示されます。
display.colheader_justify:[デフォルト:右] [現在:右]
: '左右'
        列ヘッダーの位置揃えを制御します。DataFrameFormatterによって使用されます。
display.column_space:[デフォルト:12] [現在:12]説明はありません。

display.date_dayfirst:[デフォルト:False] [現在:False]
:ブール
        Trueの場合、日付を最初に出力して解析します(例:20/01/2005)
display.date_yearfirst:[デフォルト:False] [現在:False]
:ブール
        Trueの場合、日付を最初に年で出力および解析します(例:2005/01/20)。
display.encoding:[デフォルト:UTF-8] [現在:UTF-8]
:str / unicode
        デフォルトは、コンソールの検出されたエンコードです。
        to_stringによって返される文字列に使用されるエンコーディングを指定します。
        これらは通常、コンソールに表示される文字列です。
display.expand_frame_repr:[デフォルト:True] [現在:True]
:ブール
        ワイドDataFrameの完全なDataFrame reprを印刷するかどうか
        複数行にわたって、 `max_columns`は引き続き尊重されますが、出力は
        幅が「display.width」を超える場合、複数の「ページ」にまたがってラップアラウンドします。
display.float_format:[デフォルト:なし] [現在:なし]
:呼び出し可能
        呼び出し可能オブジェクトは浮動小数点数を受け入れて返す必要があります
        数値の望ましい形式の文字列。これが使われます
        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
        max_rowsとmax_columnsは__repr __()メソッドで使用され、
        to_string()またはinfo()は、オブジェクトを文字列にレンダリングするために使用されます。万一に備えて
        python / IPythonはターミナルで実行されています。これは0とパンダに設定できます
        端末の幅を正しく自動検出し、小さい方にスワップします
        すべての列が垂直に収まらない場合のフォーマット。IPython Notebook、
        IPython qtconsole、またはIDLEはターミナルで実行されないため、
        正しい自動検出を行うことが可能です。
        「なし」の値は無制限を意味します。
display.max_colwidth:[デフォルト:50] [現在:50]
:int
        の列の文字の最大幅
        パンダのデータ構造。列がオーバーフローすると、「...」
        プレースホルダーは出力に埋め込まれます。
display.max_info_columns:[デフォルト:100] [現在:100]
:int
        max_info_columnsはDataFrame.infoメソッドで使用され、
        列ごとの情報が出力されます。
display.max_info_rows:[デフォルト:1690785] [現在:1690785]
:intまたはNone
        max_info_rowsは、フレームが対象とする最大行数です。
        コンソールに表示するときに、その列でnullチェックを実行します。
        デフォルトは1,000,000行です。したがって、DataFrameにさらに多くの
        1,000,000行では、nullチェックは実行されません
        列、したがって表現ははるかに少ない時間がかかります
        インタラクティブセッションで表示します。Noneの値は常に意味します
        再実行時にnullチェックを実行します。
display.max_rows:[デフォルト:60] [現在:500]
:int
        印刷時にパンダが出力する最大行数を設定します
        さまざまな出力。たとえば、この値はrepr()が
        データフレームの場合は、完全に出力するか、単に要約を表示します。
        「なし」の値は無制限を意味します。
display.max_seq_items:[デフォルト:なし] [現在:なし]
:intまたはNone

        長いシーケンスをプリティプリントするときは、 `max_seq_items`以下
        印刷されます。項目が省略されている場合は、追加で示されます
        結果の文字列への「...」の。

        「なし」に設定すると、印刷されるアイテムの数は無制限になります。
display.mpl_style:[デフォルト:なし] [現在:なし]
:ブール

        これを「デフォルト」に設定すると、matplotlibで使用されるrcParamsが変更されます
        デフォルトでプロットをより心地よい視覚スタイルにするため。
        これをNone / Falseに設定すると、値が初期値に戻ります。
display.multi_sparse:[デフォルト:True] [現在:True]
:ブール
        「sparsify」MultiIndex表示(繰り返し表示しない
        グループ内の外部レベルの要素)
display.notebook_repr_html:[デフォルト:True] [現在:True]
:ブール
        Trueの場合、IPythonノートブックはHTML表現を使用して
        pandasオブジェクト(使用可能な場合)。
display.pprint_nest_depth:[デフォルト:3] [現在:3]
:int
        プリティプリント時に処理するネストされたレベルの数を制御します
display.precision:[デフォルト:7] [現在:7]
:int
        浮動小数点出力精度(有効桁数)。これは
        提案だけ
display.width:[デフォルト:80] [現在:1000]
:int
        ディスプレイの幅(文字数)。python / IPythonが実行されている場合
        端末はNoneに設定でき、パンダは正しく自動検出します
        幅。
        IPython Notebook、IPython qtconsole、またはIDLEは、
        ターミナルなので、幅を正しく検出することはできません。
mode.sim_interactive:[デフォルト:False] [現在:False]
:ブール
        テストのためにインタラクティブモードをシミュレートするかどうか
mode.use_inf_as_null:[デフォルト:False] [現在:False]
:ブール
        Trueは、None、NaN、INF、-INFをnullとして扱う(古い方法)、
        FalseはNoneとNaNがnullであることを意味しますが、INF、-INFはnullではありません
        (新しい方法)。
defを呼び出します:pd.set_option(self、* args、** kwds)

編集:古いバージョン情報、これの多くは廃止されました。

@bmuが言及したように、パンダは表示領域のサイズを(デフォルトで)自動検出します。要約ビューは、オブジェクトreprが表示に適合しない場合に使用されます。IDLEウィンドウのサイズを変更しても、効果はありません。もしそうならprint df.describe().to_string()、それはアイドルウィンドウに適合しますか?

端末サイズはpandas.util.terminal.get_terminal_size()(非推奨で削除された)によって決定され(width, height)、ディスプレイのを含むタプルを返します。出力はIDLEウィンドウのサイズと一致しますか?問題がある可能性があります(emacsで端末を実行するときに1つ前に発生しました)。

自動検出をバイパスすることが可能pandas.set_printoptions(max_rows=200, max_columns=10)であり、行数、列数が指定された制限を超えない場合、要約ビューに切り替わらないことに注意してください。


'max_colwidth'オプションは、各列の切り捨てられていない形式を確認するのに役立ちます。

TruncatedColumnDisplay


4
display.height:非推奨、display.height代わりに使用してください...私はデッドループに陥っています。
Frozen Flame

5
現在、オプションはの属性への割り当てpd.optionsとして設定することもできます。例:pd.options.display.max_rows = 999
unutbu

2
'display.height'プロパティは廃止されました。
Greg M. Krsak

2
Pandas 0.23.2では動作しませんでした。
devinbost 2018

6
option_contextを使用して、オプションの変更が作業対象のものに対してローカルになるようにすることができます。これにより、次の呼び出しなどで誤って400ページのジャンクを印刷することが防止されます.head()
マイクウィリアムソン

195

これを試して:

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

ドキュメントから:

display.expand_frame_repr:ブール値

複数の行にまたがる広いDataFrameの完全なDataFrame reprを出力するかどうかにかかわらず、max_columnsは引き続き考慮されますが、幅がdisplay.widthを超える場合、出力は複数の「ページ」にまたがって折り返されます。[デフォルト:True] [現在:True]

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


6
これは私のために働きます。パンダが何らかの理由で出力幅を誤って計算し、列を不必要に分割するようです。
zbyszek 2015

5
私は文字通りこれを毎日行わなければなりません...これをどこかにグローバルに設定する方法はありますか?
citynorman 2018年

1
@citynorman pandas\core\config_init.pyが永続的に設定することを確認します。
Jarad、

106

オプションを一時的に設定して1つの大きなDataFrameを表示する場合は、option_contextを使用できます。

with pd.option_context('display.max_rows', None, 'display.max_columns', None):
    print (df)

オプション値は、withブロックを終了すると自動的に復元されます。


3
制限なしを設定するためにNone使用できます(999などの代わりに)。
Eric O Lebigot 2017

5
with pd.option_context('display.max_rows', None, 'display.max_columns', None): print(energy)うまくいきませんでした。表示したい列の数は変わりませんでした。ただし、Wouter Overmeiereのソリューションは機能しました。
Aziz Javed 2017

しかし、違いがあります。None ではなく、-1またはのような数が必要500です。
jezrael 2017

2
-1を使用するとクラッシュし、500でも何も実行されませんでした
Aziz Javed

1
+1はコンテキストマネージャを提案しますが、max_rows値は-1です。'display.max_rows'-1に設定すると、書式設定が完全​​に混乱するようです(私のデータではクラッシュしませんが、特定の行が複数回印刷されます)。
bluenote10

88

これらの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 Code 1.26


54

以下を使用して列の最大幅を設定:

pd.set_option('max_colwidth', 800)

この特定のステートメントは、列ごとに最大幅を800pxに設定します。


2
降順の投票順序で下にスクロールすると、パンダがDataFrameのプレーンテキスト出力を切り捨てないようにするために私が働いた最初の答えはこれです。(pandas 0.22、iTerm2 3.0.13、OS X 10.12)。
Peter Leimbigler

2
これは私のためにPandas 0.23.2で動作した唯一のものです。
devinbost 2018

1
display.max_colwidthなぜそれを指定する必要がなかったのですか?これは、ドキュメントに記載されている方法です。私max_colwidthはうまくいくだけで、書くのが短いことに同意しますが、私は驚きました。
cmo 2018年

26

を使用print df.describe().to_string()して、テーブル全体を強制的に表示できます。(to_string()どのDataFrameでもこのように使用できます。結果はdescribeDataFrameそのものです。)

8は、「説明」を保持するDataFrameの行数です(describe8つの統計、最小、最大、平均などを計算するため)。


26

でパンダの印刷オプションを調整できます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

ただし、パンダがコンソールの幅を検出するため、これはすべてのケースで機能するわけではなくto_string、出力がコンソールに収まる場合にのみ使用されます(のdocstringを参照set_printoptions)。この場合to_stringBrenBarnの応答に従って明示的に呼び出すことができます。

更新

バージョン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

私はlodagroによって言及されたmax_columnsメソッドを使用することを好みますが、表示される統計をクリーンアップするのに役立つため、precisionキーワードについて言及してよかったです。ありがとう!
ビート

22

現在の端末の幅に一致するように出力表示を設定できます。

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

6
@ wouter-overmeireは、パンダがこれを自動的に行うと言っていますが、少なくとも0.18.0ではそうではないようです。ただし、pd.set_option('display.width', None)ターミナルで使用する場合、「パンダは幅を正しく自動検出します」
マティアスフリップ2016

丁度!デフォルトではそうしません。なしに設定すると、幅はまったく無視されます。多分それはパンダのバグなのか、それともgnomeターミナルに関係があるのでしょうか?ウィルフレッド・ヒューズに感謝します!
danger89

3
AttributeError:モジュール 'pandas.util'に属性 'terminal'がありません
Bhishan Poudel

1
@BhishanPoudelこれは代わりに行うことができます:pd.options.display.width = None
SebMa

1
@BhishanPoudelこの回答は数年前のもので、私はあなたと同じ問題に遭遇しました。これを書いている時点で、pandasバージョン0.23.1を使用すると、モジュールは次のようになりますpd.io.formats.terminal.get_terminal_size()
Ajay

13

v0.18.0ドキュメントによると、ターミナル(iPythonノートブック、qtconsole、IDLEではない)で実行している場合、Pandasが画面の幅を自動検出し、その数に応じてその場で適応させるのは2ライナーです表示される列:

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

1
これでうまくいきました。ありがとうございます。OS X 10.11.6の組み込みターミナルアプリを使用してPandas 0.22.0(2018年2月8日現在)を使用しています
Greg Sadetsky

8

上記のすべての回答で問題が解決したようです。もう1つのポイント:の代わりにpd.set_option('option_name')、(オートコンプリート可能)を使用できます

pd.options.display.width = None

Pandas doc:オプションと設定を参照してください

オプションには完全な「ドット付きスタイル」があり、大文字と小文字は区別されません(例:) 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_...のparams:

max_rowsmax_columnsに使用されている__repr__()かどうかを決定するための方法to_string()またはinfo()文字列にオブジェクトをレンダリングするために使用されます。python / IPythonがターミナルで実行されている場合、これは0に設定でき、パンダはターミナルの幅を正しく自動検出し、すべての列が垂直に収まらない場合に、より小さいフォーマットにスワップします。IPythonノートブック、IPython qtconsole、またはIDLEはターミナルで実行されないため、正しい自動検出を行うことはできません。' None'値は無制限を意味します。【オリジナルではない強調】

以下のためwidthのparam:

ディスプレイの幅(文字数)。python / IPythonがターミナルで実行されている場合、これはに設定できNone、パンダは幅を正しく自動検出します。IPython Notebook、IPython qtconsole、またはIDLEはターミナルで実行されないため、幅を正しく検出できないことに注意してください。


5
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

必要なのは次の2つだけです:(上記の例を確認)パンダをpdとしてインポートpd.set_option( 'display.max_columns'、100)pd.set_option( 'display.width'、1000)
William Pourmajidi

4

データの規模が大きい場合にこれらの設定を使用しました。

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

ここでドキュメントを参照できます


4

以下の行は、データフレームのすべての列を表示するのに十分です。 pd.set_option('display.max_columns', None)


1
SOへようこそ!質問に新しい回答を投稿し、さらに回答がいくつかある場合は、長所を見せてください。答えはまだ1つありpd.set_option('display.max_columns', 0)ます。あなたの利点はどれですか。
DavidGarcíaBodego

3

表示オプションを変更したくない場合、表示するすべてのデータフレームを展開せずに、この列の特定のリストだけを表示したい場合は、次の方法を試してください。

df.columns.values


2

次の手順を実行するだけで、

  • 次のように、pandas max_columns機能のオプションを変更できます。

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

    (これにより、10列を表示できます。必要に応じて変更できます)

  • 同様に、次のように表示する必要があるときに行数を変更できます(最大行数も変更する必要がある場合)

    pd.options.display.max_rows = 999

    (これにより、一度に999行を印刷できます)

パンダのさまざまなオプション/設定を変更するには、ドキュメントを参照してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.