Как расширить выводной дисплей, чтобы увидеть больше столбцов пандой DataFrame?


624

Есть ли способ расширить отображение вывода в интерактивном режиме или в режиме выполнения скрипта?

В частности, я использую describe()функцию на пандах DataFrame. Когда DataFrameширина составляет 5 столбцов (меток), я получаю описательную статистику, которая мне нужна. Однако, если DataFrameстолбцы имеют больше, статистика подавляется и возвращается что-то вроде этого:

>> Index: 8 entries, count to max  
>> Data columns:  
>> x1          8  non-null values  
>> x2          8  non-null values  
>> x3          8  non-null values  
>> x4          8  non-null values  
>> x5          8  non-null values  
>> x6          8  non-null values  
>> x7          8  non-null values  

Значение «8» задается, есть ли 6 или 7 столбцов. Что означает «8»?

Я уже пытался перетащить окно IDLE побольше, а также увеличить параметры ширины «Настроить IDLE», но безрезультатно.

Моя цель в использовании панд и describe()заключается в том, чтобы не использовать вторую программу, такую ​​как Stata, для базовых манипуляций и исследования данных.

Ответы:


890

Обновление: Pandas 0.23.4 и выше

Это не обязательно, pandas автоматически определяет размер окна вашего терминала, если вы его установили pd.options.display.width = 0. (Для более старых версий смотрите внизу.)

pandas.set_printoptions(...)устарел. Вместо этого используйте pandas.set_option(optname, val)или эквивалентно pd.options.<opt.hierarchical.name> = val. Подобно:

import pandas as pd
pd.set_option('display.max_rows', 500)
pd.set_option('display.max_columns', 500)
pd.set_option('display.width', 1000)

Вот помощь дляset_option :

set_option (pat, value) - устанавливает значение указанной опции

Доступные Варианты:
отображение. [chop_threshold, colheader_justify, column_space, date_dayfirst,
         date_yearfirst, кодировка, expand_frame_repr, float_format, высота,
         line_width, max_columns, max_colwidth, max_info_columns, max_info_rows,
         max_rows, max_seq_items, mpl_style, multi_sparse, notebook_repr_html,
         pprint_nest_depth, точность, ширина]
режим. [sim_interactive, use_inf_as_null]

параметры
----------
pat - str / regexp, который должен соответствовать одному параметру.

Примечание: частичные совпадения поддерживаются для удобства, но если вы не используете
полное имя опции (egxyzoption_name), ваш код может сломаться в будущем
версии, если введены новые опции с похожими именами.

значение - новое значение опции.

Возвращает
-------
Никто

Повышения
------
KeyError, если такой опции не существует

display.chop_threshold: [по умолчанию: нет] [в настоящее время: нет]
: плавать или нет
        если установлено значение с плавающей точкой, все значения с плавающей точкой меньше заданного порога
        будет отображаться как 0 как repr, так и друзьями.
display.colheader_justify: [по умолчанию: справа] [в настоящее время: справа]
: 'лево право'
        Управляет выравниванием заголовков столбцов. используется DataFrameFormatter.
display.column_space: [по умолчанию: 12] [в настоящее время: 12] Описание недоступно.

display.date_dayfirst: [по умолчанию: False] [в настоящее время: False]
: boolean
        При значении True печатает и анализирует даты первым, например, 20/01/2005
display.date_yearfirst: [по умолчанию: False] [в настоящее время: False]
: boolean
        При значении True печатает и анализирует даты с первым годом, например, 2005/01/20
display.encoding: [по умолчанию: UTF-8] [в настоящее время: UTF-8]
: str / unicode
        По умолчанию используется обнаруженная кодировка консоли.
        Определяет кодировку, которая будет использоваться для строк, возвращаемых to_string,
        обычно это строки, предназначенные для отображения на консоли.
display.expand_frame_repr: [по умолчанию: True] [в настоящее время: True]
: boolean
        Распечатывать ли полный репозиторий DataFrame для широких фреймов данных
        в нескольких строках `max_columns` все еще соблюдается, но вывод будет
        Обтекание нескольких «страниц», если его ширина превышает `display.width`.
display.float_format: [по умолчанию: нет] [в настоящее время: нет]
: вызываемый
        Вызываемый должен принять число с плавающей запятой и вернуть
        строка с желаемым форматом числа. Это используется
        в некоторых местах, таких как SeriesFormatter.
        См. Core.format.EngFormatter для примера.
высота дисплея: [по умолчанию: 60] [в настоящее время: 1000]
: int
        Устаревшее.
        (Устаревший, используйте вместо него `display.height`.)

display.line_width: [по умолчанию: 80] [в настоящее время: 1000]
: int
        Устаревшее.
        (Устаревший, вместо этого используйте `display.width`.)

display.max_columns: [по умолчанию: 20] [в настоящее время: 500]
: int
        max_rows и max_columns используются в методах __repr __ () для определения
        to_string () или info () используется для визуализации объекта в строку. В случае
        Python / IPython работает в терминале, это может быть установлено в 0 и панды
        правильно определит ширину терминала и поменяет местами на меньшую
        формат, если все столбцы не умещаются по вертикали. Блокнот IPython,
        IPython qtconsole или IDLE не работают в терминале и, следовательно, это не так
        Возможно сделать правильное автоопределение.
        Значение «Нет» означает неограниченное.
display.max_colwidth: [по умолчанию: 50] [в настоящее время: 50]
: int
        Максимальная ширина в символах столбца в представлении
        структура данных панд. Когда столбец переполняется, появляется «...»
        заполнитель встроен в вывод.
display.max_info_columns: [по умолчанию: 100] [в настоящее время: 100]
: int
        max_info_columns используется в методе DataFrame.info, чтобы решить,
        По каждому столбцу будет напечатана информация.
display.max_info_rows: [по умолчанию: 1690785] [в настоящее время: 1690785]
: int или None
        max_info_rows - максимальное количество строк, для которых будет
        выполнить нулевую проверку его столбцов при воспроизведении в консоль.
        По умолчанию используется 1 000 000 строк. Итак, если DataFrame имеет больше
        1 000 000 строк не будет никакой нулевой проверки, выполненной на
        столбцы и, следовательно, представление займет гораздо меньше времени
        отображать в интерактивном сеансе. Значение None означает всегда
        выполнить нулевую проверку при повторном воспроизведении.
display.max_rows: [по умолчанию: 60] [в настоящее время: 500]
: int
        Это устанавливает максимальное количество строк, которые панды должны выводить при печати
        из различных выходных. Например, это значение определяет, является ли repr ()
        для кадра данных распечатывает полностью или просто резюме репр.
        Значение «Нет» означает неограниченное.
display.max_seq_items: [по умолчанию: нет] [в настоящее время: нет]
: int или None

        при симпатичной печати длинной последовательности не более `max_seq_items`
        будет напечатан. Если элементы опущены, они будут обозначены дополнением
        из "..." в результирующую строку.

        Если установлено значение Нет, количество печатаемых элементов не ограничено.
display.mpl_style: [по умолчанию: нет] [в настоящее время: нет]
: bool

        Установка этого значения по умолчанию изменит rcParams, используемый matplotlib
        чтобы дать графикам более приятный визуальный стиль по умолчанию.
        Установка этого значения в None / False восстанавливает значения до их начального значения.
display.multi_sparse: [по умолчанию: True] [в настоящее время: True]
: boolean
        "sparsify" дисплей MultiIndex (не отображать повторяется
        элементы на внешних уровнях внутри групп)
display.notebook_repr_html: [по умолчанию: True] [в настоящее время: True]
: boolean
        Когда True, блокнот IPython будет использовать представление html для
        объекты панд (если есть).
display.pprint_nest_depth: [по умолчанию: 3] [в настоящее время: 3]
: int
        Управляет количеством вложенных уровней для обработки при красивой печати
display.precision: [по умолчанию: 7] [в настоящее время: 7]
: int
        Точность вывода с плавающей запятой (количество значащих цифр). Это
        только предложение
display.width: [по умолчанию: 80] [в настоящее время: 1000]
: int
        Ширина дисплея в символах. В случае, если Python / IPython работает в
        терминал это может быть установлено на None и панды будут правильно автоматически обнаруживать
        ширина.
        Обратите внимание, что записная книжка IPython, qyconsole IPython или IDLE не работают в
        терминал и, следовательно, невозможно правильно определить ширину.
mode.sim_interactive: [по умолчанию: False] [в настоящее время: False]
: boolean
        Следует ли имитировать интерактивный режим для целей тестирования
mode.use_inf_as_null: [по умолчанию: False] [в настоящее время: False]
: boolean
        True означает, что None, NaN, INF, -INF считаются нулевыми (по-старому),
        False означает, что None и NaN равны нулю, но INF, -INF не равны нулю
        (новый путь).
Вызовите def: pd.set_option (self, * args, ** kwds)

РЕДАКТИРОВАТЬ: более старая информация о версии, большая часть этого устарела.

Как упомянуто @bmu , pandas автоматически определяет (по умолчанию) размер области отображения, а сводный вид будет использоваться, когда объект repr не помещается на дисплее. Вы упомянули изменение размера окна IDLE, безрезультатно. Если вы делаете print df.describe().to_string()это вписывается в окно IDLE?

Размер терминала определяется pandas.util.terminal.get_terminal_size()(устарел и удален), это возвращает кортеж, содержащий (width, height)дисплей. Соответствует ли вывод размеру вашего окна IDLE? Возможно, возникла проблема (она была раньше при запуске терминала в emacs).

Обратите внимание, что можно обойти автоопределение, pandas.set_printoptions(max_rows=200, max_columns=10)никогда не переключится на сводный вид, если количество строк, столбцов не превышает заданные пределы.


Опция 'max_colwidth' помогает увидеть не усеченную форму каждого столбца.

TruncatedColumnDisplay


4
display.height: устарело, используйте display.heightвместо этого ... Я в тупике.
Замороженное пламя

5
В настоящее время параметры также могут быть установлены в качестве назначений для атрибутовpd.options , например,pd.options.display.max_rows = 999
unutbu

2
Свойство display.height устарело.
Грег М. Крсак,

2
Не работал для меня в Пандах 0.23.2.
Devinbost

6
Возможно, вы захотите использовать option_context, чтобы изменения параметров были локальными для того, с чем вы работаете. Это предотвращает случайную распечатку 400 страниц нежелательной почты при следующем вызове .head()или чем-либо еще.
Майк Уильямсон

195

Попробуй это:

pd.set_option('display.expand_frame_repr', False)

Из документации:

display.expand_frame_repr: логическое значение

Независимо от того, печатать ли полный репозиторий DataFrame для широких фреймов данных в несколько строк, max_columns все еще учитывается, но вывод будет охватывать несколько «страниц», если его ширина превышает display.width. [по умолчанию: True] [в настоящее время: True]

Смотрите: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.set_option.html


6
Этот работает для меня. Кажется, что pandas по какой-то причине неправильно рассчитывает ширину вывода и без необходимости разбивает столбцы.
zbyszek

5
Я буквально должен делать это каждый день ... Есть ли способ установить это где-нибудь глобально?
сеньорман

1
@citynorman посмотри, pandas\core\config_init.pyчтобы установить его навсегда.
Джарад

106

Если вы хотите временно установить параметры для отображения одного большого DataFrame, вы можете использовать option_context :

with pd.option_context('display.max_rows', None, 'display.max_columns', None):
    print (df)

Значения параметров восстанавливаются автоматически при выходе из withблока.


3
Для того, чтобы не устанавливать никаких ограничений, Noneмогут быть использованы (вместо 999 и т. Д.).
Эрик О Лебиго

5
with pd.option_context('display.max_rows', None, 'display.max_columns', None): print(energy)не работал Это не изменило количество столбцов, которые я хотел увидеть. Однако решение Wouter Overmeiere сработало.
Азиз Джавед

Но есть разница, нужно какое-то число, как -1или 500, а не None.
jezrael

2
Использование -1
Азиз Джавед

1
+1 для предложения контекстного менеджера, но -1 для max_rowsзначения;). Установка 'display.max_rows'в -1, кажется, полностью испортила форматирование (для моих данных нет сбоев, но теперь он печатает определенные строки несколько раз).
bluenote10

88

Только использование этих 3 строк работало для меня:

pd.set_option('display.max_columns', None)  
pd.set_option('display.expand_frame_repr', False)
pd.set_option('max_colwidth', -1)

Anaconda / Python 3.6.5 / pandas: 0.23.0 / Visual Studio Code 1.26


55

Установите максимальную ширину столбца, используя:

pd.set_option('max_colwidth', 800)

Этот конкретный оператор устанавливает максимальную ширину в 800 пикселей на столбец.


2
Прокрутка вниз в порядке убывания - это первый ответ, который помог мне получить панд, чтобы они не усекали вывод в виде открытого текста в DataFrames. (панды 0.22, iTerm2 3.0.13, OS X 10.12).
Питер Леймбиглер

2
Это единственный, который работал на меня для Pandas 0.23.2.
Devinbost

1
Почему вы не должны были указать это как display.max_colwidth? Вот как это указано в документации. Я согласен, что max_colwidthработает только и короче, чтобы написать, но я был удивлен.
Cmo

26

Вы можете использовать, print df.describe().to_string()чтобы заставить его показать всю таблицу. (Вы можете использовать to_string()это для любого DataFrame. Результатом describeявляется просто сам DataFrame.)

8 - это количество строк в DataFrame, содержащих «описание» (потому что describeвычисляет 8 статистики, мин, макс, среднее и т. Д.).


26

Вы можете настроить параметры печати панд с помощью set_printoptions.

In [3]: df.describe()
Out[3]: 
<class 'pandas.core.frame.DataFrame'>
Index: 8 entries, count to max
Data columns:
x1    8  non-null values
x2    8  non-null values
x3    8  non-null values
x4    8  non-null values
x5    8  non-null values
x6    8  non-null values
x7    8  non-null values
dtypes: float64(7)

In [4]: pd.set_printoptions(precision=2)

In [5]: df.describe()
Out[5]: 
            x1       x2       x3       x4       x5       x6       x7
count      8.0      8.0      8.0      8.0      8.0      8.0      8.0
mean   69024.5  69025.5  69026.5  69027.5  69028.5  69029.5  69030.5
std       17.1     17.1     17.1     17.1     17.1     17.1     17.1
min    69000.0  69001.0  69002.0  69003.0  69004.0  69005.0  69006.0
25%    69012.2  69013.2  69014.2  69015.2  69016.2  69017.2  69018.2
50%    69024.5  69025.5  69026.5  69027.5  69028.5  69029.5  69030.5
75%    69036.8  69037.8  69038.8  69039.8  69040.8  69041.8  69042.8
max    69049.0  69050.0  69051.0  69052.0  69053.0  69054.0  69055.0

Однако это не будет работать во всех случаях, так как pandas определяет ширину вашей консоли и будет использоваться только в том to_stringслучае, если выходные данные помещаются в консоль (см. Строку документации set_printoptions). В этом случае вы можете явно позвонить, to_stringкак ответил BrenBarn .

Обновить

В версии 0.10 изменен способ печати широких кадров данных :

In [3]: df.describe()
Out[3]: 
                 x1            x2            x3            x4            x5  \
count      8.000000      8.000000      8.000000      8.000000      8.000000   
mean   59832.361578  27356.711336  49317.281222  51214.837838  51254.839690   
std    22600.723536  26867.192716  28071.737509  21012.422793  33831.515761   
min    31906.695474   1648.359160     56.378115  16278.322271     43.745574   
25%    45264.625201  12799.540572  41429.628749  40374.273582  29789.643875   
50%    56340.214856  18666.456293  51995.661512  54894.562656  47667.684422   
75%    75587.003417  31375.610322  61069.190523  67811.893435  76014.884048   
max    98136.474782  84544.484627  91743.983895  75154.587156  99012.695717   

                 x6            x7  
count      8.000000      8.000000  
mean   41863.000717  33950.235126  
std    38709.468281  29075.745673  
min     3590.990740   1833.464154  
25%    15145.759625   6879.523949  
50%    22139.243042  33706.029946  
75%    72038.983496  51449.893980  
max    98601.190488  83309.051963  

Более того, изменился API для настройки параметров панд:

In [4]: pd.set_option('display.precision', 2)

In [5]: df.describe()
Out[5]: 
            x1       x2       x3       x4       x5       x6       x7
count      8.0      8.0      8.0      8.0      8.0      8.0      8.0
mean   59832.4  27356.7  49317.3  51214.8  51254.8  41863.0  33950.2
std    22600.7  26867.2  28071.7  21012.4  33831.5  38709.5  29075.7
min    31906.7   1648.4     56.4  16278.3     43.7   3591.0   1833.5
25%    45264.6  12799.5  41429.6  40374.3  29789.6  15145.8   6879.5
50%    56340.2  18666.5  51995.7  54894.6  47667.7  22139.2  33706.0
75%    75587.0  31375.6  61069.2  67811.9  76014.9  72039.0  51449.9
max    98136.5  84544.5  91744.0  75154.6  99012.7  98601.2  83309.1

Я предпочитаю использовать метод max_columns, упомянутый lodagro, но я рад, что вы упомянули ключевое слово precision, поскольку это поможет очистить отображаемую статистику. Спасибо!
свекла

22

Вы можете установить выходной дисплей в соответствии с текущей шириной терминала:

pd.set_option('display.width', pd.util.terminal.get_terminal_size()[0])

6
@ wouter-overmeire говорит, что pandas делает это автоматически , но, похоже, это не так, по крайней мере, с 0.18.0. Однако, если вы используете pd.set_option('display.width', None)в терминале, «панды будут правильно автоматически определять ширину» .
Матиас Фрипп

Точно! Это не делает это по умолчанию. Установка его на None, он просто игнорирует ширину. Может быть, это ошибка в Pandas или, может быть, это связано с терминалом gnome ..? Спасибо Уилфред Хьюз!
danger89

3
AttributeError: модуль 'pandas.util' не имеет атрибута 'терминал'
Бхишан Пудель

1
@BhishanPoudel Вы можете сделать это вместо этого:pd.options.display.width = None
SebMa

1
@BhishanPoudel Этому ответу несколько лет, и я столкнулся с той же проблемой, что и вы. На момент написания этого, используя версию 0.23.1 для панд, модуль теперьpd.io.formats.terminal.get_terminal_size()
Ajay

13

В соответствии с документацией для v0.18.0 , если вы работаете на терминале (то есть не на ноутбуке iPython, qtconsole или IDLE), это 2-линейный режим, позволяющий Pandas автоматически определять ширину вашего экрана и адаптироваться на лету со сколькими столбцы это показывает:

pd.set_option('display.large_repr', 'truncate')
pd.set_option('display.max_columns', 0)

1
Это сработало для меня, спасибо! Я использую Pandas 0.22.0 (последний на 8 февраля 2018 года), используя встроенное приложение терминала в OS X 10.11.6
Грег Садецкий,

8

Кажется, что все вышеупомянутые ответы решают проблему. Еще один момент: вместо pd.set_option('option_name'), вы можете использовать (автозаполнение)

pd.options.display.width = None

Смотрите Pandas doc: Опции и настройки:

Параметры имеют полное «пунктирное» имя без учета регистра (например, display.max_rows). Вы можете получить / установить параметры напрямую как атрибуты атрибута верхнего уровня options:

In [1]: import pandas as pd

In [2]: pd.options.display.max_rows
Out[2]: 15

In [3]: pd.options.display.max_rows = 999

In [4]: pd.options.display.max_rows
Out[4]: 999

[...]

для max_...параметров:

max_rowsи max_columnsиспользуются в __repr__()методах, чтобы решить, используется ли to_string()или info()используется для визуализации объекта в строку. В случае, если python / IPython работает в терминале, это может быть установлено в 0, и pandas будет правильно автоматически определять ширину терминала и переключаться на меньший формат в случае, если все столбцы не поместятся по вертикали. Записная книжка IPython, IPython qtconsole или IDLE не работают в терминале, и, следовательно, невозможно выполнить правильное автоопределение. « NoneЗначение означает неограниченное. [акцент не в оригинале]

для widthпараметра:

Ширина дисплея в символах. Если в терминале запущен python / IPython, это можно установить на Nonepandas, который автоматически определит ширину. Обратите внимание, что записная книжка IPython, IPython qtconsole или IDLE не работают в терминале, и, следовательно, невозможно правильно определить ширину.


5
import pandas as pd
pd.set_option('display.max_columns', 100)
pd.set_option('display.width', 1000)

SentenceA = "William likes Piano and Piano likes William"
SentenceB = "Sara likes Guitar"
SentenceC = "Mamoosh likes Piano"
SentenceD = "William is a CS Student"
SentenceE = "Sara is kind"
SentenceF = "Mamoosh is kind"


bowA = SentenceA.split(" ")
bowB = SentenceB.split(" ")
bowC = SentenceC.split(" ")
bowD = SentenceD.split(" ")
bowE = SentenceE.split(" ")
bowF = SentenceF.split(" ")

# Creating a set consisted of all words

wordSet = set(bowA).union(set(bowB)).union(set(bowC)).union(set(bowD)).union(set(bowE)).union(set(bowF))
print("Set of all words is: ", wordSet)

# Initiating dictionary with 0 value for all BOWs

wordDictA = dict.fromkeys(wordSet, 0)
wordDictB = dict.fromkeys(wordSet, 0)
wordDictC = dict.fromkeys(wordSet, 0)
wordDictD = dict.fromkeys(wordSet, 0)
wordDictE = dict.fromkeys(wordSet, 0)
wordDictF = dict.fromkeys(wordSet, 0)

for word in bowA:
    wordDictA[word] += 1
for word in bowB:
    wordDictB[word] += 1
for word in bowC:
    wordDictC[word] += 1
for word in bowD:
    wordDictD[word] += 1
for word in bowE:
    wordDictE[word] += 1
for word in bowF:
    wordDictF[word] += 1

# Printing Term frequency

print("SentenceA TF: ", wordDictA)
print("SentenceB TF: ", wordDictB)
print("SentenceC TF: ", wordDictC)
print("SentenceD TF: ", wordDictD)
print("SentenceE TF: ", wordDictE)
print("SentenceF TF: ", wordDictF)

print(pd.DataFrame([wordDictA, wordDictB, wordDictB, wordDictC, wordDictD, wordDictE, wordDictF]))

Вывод:

   CS  Guitar  Mamoosh  Piano  Sara  Student  William  a  and  is  kind  likes
0   0       0        0      2     0        0        2  0    1   0     0      2
1   0       1        0      0     1        0        0  0    0   0     0      1
2   0       1        0      0     1        0        0  0    0   0     0      1
3   0       0        1      1     0        0        0  0    0   0     0      1
4   1       0        0      0     0        1        1  1    0   1     0      0
5   0       0        0      0     1        0        0  0    0   1     1      0
6   0       0        1      0     0        0        0  0    0   1     1      0

Вам просто нужны эти два: (проверьте приведенный выше пример) импортируйте панд как pd pd.set_option ('display.max_columns', 100) pd.set_option ('display.width', 1000)
Уильям Пурмаджиди

4

Я использовал эти настройки, когда масштаб данных высок.

# environment settings: 
pd.set_option('display.max_column',None)
pd.set_option('display.max_rows',None)
pd.set_option('display.max_seq_items',None)
pd.set_option('display.max_colwidth', 500)
pd.set_option('expand_frame_repr', True)

Вы можете обратиться к документации здесь


4

Для отображения всех столбцов в кадре данных достаточно строки ниже. pd.set_option('display.max_columns', None)


1
Добро пожаловать на ТАК! Когда вы публикуете новый ответ на вопрос и есть еще несколько ответов, попробуйте показать плюсы. Есть еще один ответ pd.set_option('display.max_columns', 0)Какие из ваших преимуществ?
Дэвид Гарсия Бодего

3

Если вы не хотите связываться с опциями отображения и просто хотите увидеть этот конкретный список столбцов, не раскрывая каждый просматриваемый кадр данных, вы можете попробовать:

df.columns.values


2

Вы можете просто сделать следующие шаги,

  • Вы можете изменить параметры функции панды max_columns следующим образом

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

    (это позволяет отображать 10 столбцов, вы можете изменить это по мере необходимости)

  • Таким образом, вы можете изменить количество строк по мере необходимости, как показано ниже (если вам нужно также изменить максимальное количество строк)

    pd.options.display.max_rows = 999

    (это позволяет печатать 999 строк одновременно)

Пожалуйста, обратитесь к документу, чтобы изменить различные параметры / настройки для панд

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.