Друкуйте дуже довгий рядок повністю у фреймі даних панди


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 запропонував збільшити ширину стовпців за допомогою параметра відображення панди, яка також не працювала.
  • Я також не отримав, як 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

І дійсно, якщо ви просто хочете перевірити одне значення, отримавши доступ до нього (як скаляр, а не як рядок, як 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] - не працює - я надрукую перший і третій ряд і
вирізаний

Це спрацює, якщо ви хочете елемент третього ряду та першого стовпця. Якщо ви хочете чогось іншого, будь ласка, відкрийте нове запитання.
joris

Це працює, thx! У мене є список поштових індексів в 1 стовпці, і застосувати застосувати, щоб знайти мінімум та максимальний стовпець за допомогою функції: df ['zipcodeMinMax'] = df.loc [:, ['zipcodeList']]. Застосовувати (createMinMaxZipcode, ось = 1). Тож у межах функції я виконую торінгсерінг у серії (stringZipcodes = zipcodeList.to_string (header = False, index = False)). Більш довгі списки поштових індексів привели до кінця 3 крапки, наприклад "1111 ...". Дійсно цього не відбувається, якщо ви вибираєте значення на основі індексу та стовпця (як скаляр). Моє запитання: чому така поведінка? Налаштування параметрів відображення для впливу на застосування мені здається дивним? Дякую!
Wouter

1
@ Якщо у вас виникне інше питання, краще задайте нове, а не коментувати тут
joris

1
Це не працює для більшого рядка, як абзацу з кількома рядками.
devssh

37

Використовувати pd.set_option('display.max_colwidth', -1)для автоматичних розривів ліній та багаторядкових комірок.

Це чудовий ресурс про те, як повноцінно використовувати дисплей юпітерів із пандами.


6
pd.set_option('display.max_colwidth', None)для новіших версій
cookiemonster

Це найкраща відповідь
clancy

17

Ще один досить простий підхід - це функція списку дзвінків:

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

Не варто згадувати, що це не добре, щоб монастир перелічив цілі стовпці, але для простого рядка - чому б і ні


1
Якщо ви знищуєте свій df на основі деяких критеріїв пошуку, і він переходить до одного рядка, це не працює. Це найпростіший спосіб, для налагодження потреб у будь-якому випадку я хотів би, щоб це спрацювало, але я не знаю, чому це не відбувається. Ви отримуєте "*** KeyError: 0". Я здогадуюсь, що це стосується того, щоб бути схожим на "скаляра", коли існує лише одне значення.
Starman

На сьогоднішній день це повертає всіх символів із запитом у df, який повертає дві комірки із 127 символами, на які я був розчарований у спробі потрапити. Якщо це комусь допомагає
avirr

12

Ще один простіший спосіб надрукувати весь рядок - зателефонувати 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_column наступним чином, щоб відобразити більше стовпців

    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

Якщо ви використовуєте ноутбук з юпітером, ви також можете надрукувати рамки даних панди як 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.