パンダのデータフレームに非常に長い文字列を完全に印刷します


116

一見非常に単純なことに苦労しています。非常に長い文字列を含むパンダデータフレームがあります。

df = pd.DataFrame({'one' : ['one', 'two', 
      'This is very long string very long string very long string veryvery long string']})

同じ文字列を印刷しようとすると、文字列全体が表示されず、文字列の一部しか表示されません。

次のオプションを試しました

  • を使用して print(df.iloc[2])
  • を使用して to_html
  • を使用して to_string
  • stackoverflow回答の1つは、pandas表示オプションを使用して列幅を増やすことを提案しましたが、どちらも機能しませんでした。
  • また、set_printoptions私がどのように役立つかわかりませんでした。

どんなアイデアでも大歓迎です。非常にシンプルに見えますが、取得できません!

回答:


176

を使用options.display.max_colwidthして、デフォルトの表現で詳細を表示することを指定できます。

In [2]: df
Out[2]:
                                                 one
0                                                one
1                                                two
2  This is very long string very long string very...

In [3]: pd.options.display.max_colwidth
Out[3]: 50

In [4]: pd.options.display.max_colwidth = 100

In [5]: df
Out[5]:
                                                                               one
0                                                                              one
1                                                                              two
2  This is very long string very long string very long string veryvery long string

実際、1つの値だけを検査したい場合は、それにアクセスすることで(行のようにでdf.iloc[2]はなくスカラーとして)、完全な文字列も表示されます。

In [7]: df.iloc[2,0]    # or df.loc[2,'one']
Out[7]: 'This is very long string very long string very long string veryvery long string'

2
df.iloc [2,0]-機能しません-1行目と3行目を印刷してカットします(
Rocketq

3行1列の要素が必要な場合は機能します。他に何か必要な場合は、新しい質問を開いてください。
joris

動作します、thx!1列に郵便番号のリストがあり、applyを使用して、次の関数を使用して最小列と最大列を賢く見つけます:df ['zipcodeMinMax'] = df.loc [:、['zipcodeList']]。apply(createMinMaxZipcode、axis = 1)。したがって、関数内でシリーズのto_stringを実行します(stringZipcodes = zipcodeList.to_string(header = False、index = False))。郵便番号のより長いリストは、最後に3つのドットをもたらしました(例: "1111 ...")。実際、インデックスと列に基づいて値を選択した場合(スカラーとして)、これは起こりません。私の質問:なぜこの動作なのか?適用に影響を与えるように表示オプションを設定すると、奇妙に思えますか?どうも!
Wouter

1
@Wouter別の質問がある場合は、ここでコメントするのではなく、新しい質問をする方がよい
joris

1
これは、複数行の段落のような大きな文字列では機能しません。
devssh

37

pd.set_option('display.max_colwidth', -1)自動改行および複数行セルに使用します。

これは、パンダでjupytersディスプレイを最大限に使用する方法に関する優れたリソースです。


6
pd.set_option('display.max_colwidth', None)新しいバージョンの場合
cookiemonster

これが最良の答えです
クランシー

17

別の、かなり単純なアプローチは、リスト関数を呼び出すことです:

list(df['one'][2])
# output:
['This is very long string very long string very long string veryvery long string']

言及する価値はありませんが、列全体を一覧表示するのに適しているわけではありませんが、単純な行の場合-なぜ


1
いくつかの検索基準に基づいてdfを絞り込んでいて、1行になっている場合、これは機能しません。とにかくデバッグのニーズが最も単純な方法であり、うまくいくことを願っていますが、うまくいかない理由はわかりません。"*** KeyError:0"を取得します。値が1つしかない場合は、「スカラー」のようなものに関係していると思います。
スターマン

今日の時点で、これはクエリですべての文字をdfに返し、127文字の2つのセルを返します。それが誰かを助けるなら
avirr '11 / 11/19

12

文字列全体を出力するもう1つの簡単な方法はvalues、データフレームを呼び出すことです。

df = pd.DataFrame({'one' : ['one', 'two', 
      'This is very long string very long string very long string veryvery long string']})

print(df.values)

出力は

[['one']
 ['two']
 ['This is very long string very long string very long string veryvery long string']]

4

これはあなたがやろうとしていたことですか?

In [7]: x =  pd.DataFrame({'one' : ['one', 'two', 'This is very long string very long string very long string veryvery long string']})

In [8]: x
Out[8]: 
                                                 one
0                                                one
1                                                two
2  This is very long string very long string very...

In [9]: x['one'][2]
Out[9]: 'This is very long string very long string very long string veryvery long string'

4

印刷する前に、次の行をコードに追加してください。

 pd.options.display.max_colwidth = 90  # set a value as your need

他の追加オプションを設定するには、次の手順を実行するだけです。

  • 次のようにpandas max_columns機能のオプションを変更して、より多くの列を表示できます。

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

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

  • 同様に、次のように表示する必要がある行数を変更して、さらに行を表示できます。

    pd.options.display.max_rows = 999

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

これはうまくいくはずです

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


3

私がよく説明する状況に対処する.to_csv()方法は、メソッドを使用してstdoutに書き込むことです。

import sys

df.to_csv(sys.stdout)

更新:同様の効果を使用するNone代わりに、単に使用できるようになりましたsys.stdout

これにより、文字列全体を含むデータフレーム全体がダンプされます。to_csvパラメータを使用して、列セパレータを設定したり、インデックスが印刷されるかどうかなどを設定したりできます。ただし、適切にレンダリングするよりも見栄えが悪くなります。

私はもともとパンダのデータフレームのすべての列からのデータ出力するで多少関連する質問に答えてこれを投稿しました


2

私は小さなユーティリティ関数を作成しました、これは私にとってうまくいきます

def display_text_max_col_width(df, width):
    with pd.option_context('display.max_colwidth', width):
        print(df)

display_text_max_col_width(train_df["Description"], 800)

オプションを永続的に設定しなくても、要件に応じて幅の長さを変更できます。


1

jupyter Notebookを使用している場合は、完全な文字列を印刷するHTMLテーブルとしてパンダデータフレームを印刷することもできます。

from IPython.display import display, HTML
display(HTML(df.to_html()))

出力

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