2013-10-01 4 views
202

Я много работаю с Series и DataFrames на терминале. По умолчанию __repr__ для серии возвращает восстановленный образец с некоторыми значениями головы и хвоста, но остальные отсутствуют.Есть ли способ (довольно) распечатать всю серию Pandas/DataFrame?

Есть ли встроенный способ красивой печати всей серии/DataFrame? В идеале, это будет поддерживать правильное выравнивание, возможно, границы между столбцами и, возможно, даже цветовое кодирование для разных столбцов.

+8

В уменьшенном выходе происходит из-за настройки по умолчанию, которые можно изменить с помощью 'pd.set_option («display.max_rows», 1000)' для Например, раскраска - это что-то еще, я предполагаю, что вы говорите о раскраске вывода html repr. Я не думаю, что это построено вообще. – EdChum

+1

@EdChum: спасибо, я знал об этом 'display.max_rows', проблема в том, что большую часть времени я хочу, чтобы результат был усечен. Только изредка я хочу видеть полную отдачу. Я мог бы установить опцию с очень высоким значением, использовать значение по умолчанию '__repr__', а затем вернуть значение, но это кажется немного громоздким, и в этом случае я мог бы написать свою собственную функцию для печати. –

+0

@EdChum: относительно цветов - это цветной терминал, поэтому было бы неплохо, чтобы каждая строка была напечатана другим цветом, чтобы легко отличать значения друг от друга. Pandas хорошо работает с ipython, который использует расширенные функции терминала - включая цвет - поэтому мне было интересно, есть ли у Pandas некоторые цветовые возможности. –

ответ

305

Вы также можете использовать option_context, с одним или несколькими параметрами:

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

Это автоматически возвращает параметры их предыдущих значений.

Добавление: Если вы работаете на jupyter-ноутбук, используя display вместо print будет использовать jupyter богатую логику отображения.

+12

Это правильный ответ ... другой - обходной путь. – foobarbecue

+0

это может быть правильный ответ, но ничего не изменил для меня: \ –

+1

@AmosBordowitz, как это не работает для вас? – IanS

139

Несомненно, если это очень много, выполните функцию, подобную этой. Вы даже можете настроить его, чтобы загрузить каждый раз, когда вы запускаете IPython: https://ipython.org/ipython-doc/1/config/overview.html

def print_full(x): 
    pd.set_option('display.max_rows', len(x)) 
    print(x) 
    pd.reset_option('display.max_rows') 

Как для окрашивания, становится слишком вдаваться в подробности с цветами звучит контрпродуктивно для меня, но я согласен, что-то вроде bootstrap's .table-striped будет хорошо. Вы всегда можете указать create an issue, чтобы предложить эту функцию.

+5

Ссылка мертва. Возможно, это должно быть http://ipython.org/ipython-doc/dev/config/intro.html? – ostrokach

+2

Было бы здорово, если бы кто-то, даже автор, возможно, мог проверить и исправить ссылку и пометить эти комментарии как устаревшие. –

26

Просто используйте это для печати целых кадров:

pd.set_option('display.max_columns', None) 
pd.set_option('display.max_rows', None) 

Также вы можете создать функцию довольно-печати с менеджером контекста, как и в приведенных выше примерах.

Полный перечень полезных опций, см:

pd.describe_option('display') 

Несколько примеров использования: http://pandas.pydata.org/pandas-docs/stable/options.html

+0

Спасибо за добавление этого. «Нет» лучше, чем фактическая длина каждого отдельного кадра данных, если вы хотите отображать более одного кадра данных. – Corrumpo

+2

@Corrumpo Для некоторых опций вам нужно использовать значение '-1' int вместо' None', если вы хотите полное представление – lucidyan

127

Нет необходимости взломать настройки. Существует простой способ:

print(df.to_string()) 
+10

Непонятно, почему другие более голосовали, чем это, - кажется, что это самый простой способ для меня. – themaestro

+0

не работает, если слишком много столбцов – Nickpick

+1

Сколько у вас столбцов? Я проверил с 1300 столбцами, и он работает нормально: из импортных комбинаций itertools from string import ascii_letters df = pd.DataFrame (data = [[0] * 1326], index = [0], columns = [(a + b) для a, b в комбинациях (ascii_letters, 2)]) –

0

Попробуйте

pd.set_option('display.height',1000) 
pd.set_option('display.max_rows',500) 
pd.set_option('display.max_columns',500) 
pd.set_option('display.width',1000) 
Смежные вопросы