web-dev-qa-db-ja.com

pandas htmlテーブル出力でセルの内容をラップするjupyterノートブックを停止します

pandasオプションmax_colwidthは、データフレームのreprに含まれる文字数を制御します。

import string, random
import pandas as pd
df = pd.DataFrame([''.join(random.choice(string.ascii_lowercase + ' ') for j in range(1000)) for i in range(4)])

pd.options.display.max_colwidth = 10
print(df)

収量

           0
0  lmftge...
1  pqttqb...
2  wi wgy...
3  ow dip...

そして

pd.options.display.max_colwidth = 30
print(df)

収量

                               0
0  lmftgenioerszvgzfaxorzciow...
1  pqttqbqqe pykgguxnjsspbcti...
2  wi wgybtgcbxkobrwnaxpxwsjc...
3  ow dippaiamvvcofvousieckko...

また、pd.options.display.max_colwidth = 0を設定して、制限を完全に削除することができます。これまでのところ大丈夫です!

ただし、データフレームがノートブック内でHTMLでレンダリングされる場合、ノートブックは、この設定に関係なく、列のテーブルをディスプレイの幅にラップします。

wrapped table

これを回避する方法はありますか?つまり、HTMLテーブルの列を必要な幅でレンダリングして各行を1行に収める方法はありますか?

より一般的には、pandas出力の文字数に関係なく、ノートブック出力のHTMLテーブル列の幅を制御することは可能ですか?

14
Mike

ファイルを作成する場合:~/.jupyter/custom$ atom custom.cssそしてこれをそれに入れます:

.dataframe td {
    white-space: nowrap;
}

次に、セルを強制的に1行で表示しますが、スクロールテーブルが表示されます。

enter image description here

スクロールしないようにする場合は、次のように設定します。

div.output_subarea {
    overflow-x: inherit;
}

そして、それは必要なだけ広くなります:

enter image description here

あまりきれいではありませんが、必要に応じて片付けることができると思います。

this 非常に役に立ちました。また、登録するcssファイルを最初に作成した後でノートブックを再起動する必要がありますが、それ以降は、ページを更新するだけで、cssへの変更が有効になります。

これは私がテストしていたノートブックでした

7
Ben

ベンの答えに基づいていますが、カスタムcssファイルにアクセスする必要はありません。これはjupyterlabでは動作が異なります。

これをセルに入れて実行するだけです。

%%html
<style>
.dataframe td {
    white-space: nowrap;
}
</style>
3
SnowFrogger