質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

2回答

11131閲覧

Pandas データフレームの列幅を個別に指定する方法

autumn_nsn

総合スコア335

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

2グッド

5クリップ

投稿2020/06/04 06:39

お世話になっております。
PythonのPandasを使用して、あるデータフレームを表示しているのですが、
このデータフレームの表示方法で困っています。
表示はWindows10の「Jupyter Notebook」です。

なお、コードで使用しているCSVは書籍に載っているサンプルデータです。

Python

1import pandas as pd 2 3customer_master = pd.read_csv('customer_master.csv') 4 5# これも効果なし 6pd.options.display.max_colwidth = 100 7 8# これも効果なし 9d = dict(selector="th", props=[('width', '100px')]) 10customer_master.style.set_properties(**{'width':'100px'}).set_table_styles([d]) 11 12customer_master.head()

イメージ説明

例えば、一番右側の県名の列の幅をもう少し大きくとりたいと思っています。

ソースコードにあるように、

Python

1# これも効果なし 2pd.options.display.max_colwidth = 100 3 4# これも効果なし 5d = dict(selector="th", props=[('width', '100px')]) 6customer_master.style.set_properties(**{'width':'100px'}).set_table_styles([d])

などのコードを試してみたのですが、いずれも効果がありませんでした。

Styling - pandas
このあたりのページを参考にしているのですが、どうもよく分かりません。

どのようにすれば、セルの列幅を個別に調節できるのでしょうか?
よろしくお願い致します。

tomote1, hentaiman👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

x98000 様、アドバイスありがとうございました。

x98000の助言と下記のサイトを参考にして、列幅を好きなように微調整することができるようになりました。
ポイントは'width'ではなく'min-width'を使うことでした。

Increase width of a specific column while converting pandas Dataframes to PDF

Python

1customer_master = pd.read_csv('customer_master.csv') 2 3pd.options.display.max_rows = 40 4 5# 各列の幅を'px'や'em'単位で微調整する 6d1 = dict(selector=".col1", props=[('min-width', '100px')]) # name 7d2 = dict(selector=".col8", props=[('min-width', '60px')]) # pref 8 9customer_master.head().style.set_table_styles([d1, d2])

イメージ説明

投稿2020/06/06 00:31

autumn_nsn

総合スコア335

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

こんなこと出来るんですね。
調べたところ、options.display.max_colwidthで全体の列幅を抑えるのは効果があるようですが、列名の幅で制約を受けているようです。縮めたい列の列名を短縮することは出来ないですかね。
調整前
調整前
pd.options.display.max_colwidth=20を指定
pd.options.display.max_colwidth=20
同条件で列名を長くすると
列名が長い場合

追記

単語区切りを無視して無理やり折り返すという手もありますね。これなら折り返し可能な列だけを圧縮できます。

python

1df.style.set_table_styles( 2 [{'selector': 'th', 'props': [('word-wrap', 'break-word'),('max-width', '100px')]}, 3 {'selector': 'td:nth-child(2),td:nth-child(3),td:nth-child(5)', 'props': [('word-wrap', 'break-word'),('max-width', '100px')]}, 4 ] 5)

word-wrap

投稿2020/06/04 07:18

編集2020/06/04 09:29
x98000

総合スコア1096

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

autumn_nsn

2020/06/05 00:06

コメントありがとうございます。 こちらでもいろいろと試しているのですが、うまくいきません。 ちなみに、以下のようにしてもフォントサイズすら変わりません。 d1 = dict(selector="th", props=[('width', '300px'), ('font-size', '24pt')]) d2 = dict(selector="td", props=[('width', '300px')]) customer_master.style.set_table_styles([d1, d2]) customer_master.head() もしかして、テーマを適用しているとこのようなカスタマイズはできないのでしょうかね。
x98000

2020/06/05 00:58

customer_master2 = customer_master.style.set_table_styles([d1, d2]) customer_master2 でどうですか?
autumn_nsn

2020/06/05 06:53

head()を省略しても同じ結果でした。 一応、「jt -r」でテーマを初期化してみたりしたのですが、それでも変わりませんでした。 基本的に、set_table_styles()がまったく効いていないようなので、もうちょっと根本的なことから調べてみたいと思います。 いろいろとありがとうございました。 あと、書き忘れていましたが、pandasのバージョンは「0.23.4」です。
x98000

2020/06/05 07:00

いえ、head()の省略を言っているわけではないです。 customer_master.style.set_table_styles([d1, d2]) customer_master.head() では戻り値を受けていないので反映されないです。 なので、 customer_master2 = customer_master.style.set_table_styles([d1, d2]) という形で受けてから、 customer_master2 で表示する必要があります。
autumn_nsn

2020/06/06 00:27

アドバイスありがとうございます。 確かに以下のようにしたら、フォントサイズの変更が反映されるようになりました。 d1 = dict(selector="tr > th", props=[('width', '200px'), ('font-size', '12pt')]) d2 = dict(selector="td:nth-child(3)", props=[('font-size', '14pt')]) customer_master.head().style.set_table_styles([d1, d2]) ただし、何故かセル幅(width)だけは変更できません。 その後ネットでいろいろ調べていたら'min-width'を使うことで無事列幅を変更できるようになりました。 いろいろとありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問