Распечатать очень длинную строку полностью в кадре данных pandas


116

Я борюсь с, казалось бы, очень простой вещью: у меня есть фрейм данных pandas, содержащий очень длинную строку.

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

Работает, спасибо! У меня есть список почтовых индексов в 1 столбце, и я использую apply, чтобы найти минимальный и максимальный столбцы, используя функцию: df ['zipcodeMinMax'] = df.loc [:, ['zipcodeList']]. Apply (createMinMaxZipcode, axis = 1). Итак, внутри функции я делаю to_string для серии (stringZipcodes = zipcodeList.to_string (header = False, index = False)). Более длинные списки почтовых индексов приводили к 3 точкам в конце, например, «1111 ...». На самом деле этого не происходит, если вы выбираете значения на основе индекса и столбца (как скаляр). Мой вопрос: почему такое поведение? Мне кажется странным настройка параметров отображения для влияния на применение? Спасибо!
Воутер

1
@Wouter, если у вас есть другой вопрос, лучше задать новый, а не комментировать здесь
joris

1
Это не работает для строки большего размера, такой как абзац с несколькими строками.
devssh

37

Используется pd.set_option('display.max_colwidth', -1)для автоматического переноса строк и многострочных ячеек.

Это отличный ресурс о том, как в полной мере использовать дисплей jupyters с пандами.


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 01

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_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, вы также можете распечатать фреймворк pandas в виде таблицы 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.