Как расширить выводной дисплей, чтобы увидеть больше столбцов?
Есть ли способ расширить отображение вывода в интерактивном режиме или режиме исполнения сценария?
В частности, я использую функцию describe() в dataframe
Pandas. Когда 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", но безрезультатно.
Моя цель использования Pandas и описания() заключается в том, чтобы избежать использования второй программы, такой как STATA, для выполнения основных манипуляций и исследования данных.
Python/IDLE 2.7.3
Pandas 0.8.1
Notepad++ 6.1.4 (UNICODE)
Windows Vista SP2
Ответы
Ответ 1
Обновление: 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) - Sets the value of the specified option
Available options:
display.[chop_threshold, colheader_justify, column_space, date_dayfirst,
date_yearfirst, encoding, expand_frame_repr, float_format, height,
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, precision, width]
mode.[sim_interactive, use_inf_as_null]
Parameters
----------
pat - str/regexp which should match a single option.
Note: partial matches are supported for convenience, but unless you use the
full option name (e.g. x.y.z.option_name), your code may break in future
versions if new options with similar names are introduced.
value - new value of option.
Returns
-------
None
Raises
------
KeyError if no such option exists
display.chop_threshold: [default: None] [currently: None]
: float or None
if set to a float value, all float values smaller then the given threshold
will be displayed as exactly 0 by repr and friends.
display.colheader_justify: [default: right] [currently: right]
: 'left'/'right'
Controls the justification of column headers. used by DataFrameFormatter.
display.column_space: [default: 12] [currently: 12]No description available.
display.date_dayfirst: [default: False] [currently: False]
: boolean
When True, prints and parses dates with the day first, eg 20/01/2005
display.date_yearfirst: [default: False] [currently: False]
: boolean
When True, prints and parses dates with the year first, eg 2005/01/20
display.encoding: [default: UTF-8] [currently: UTF-8]
: str/unicode
Defaults to the detected encoding of the console.
Specifies the encoding to be used for strings returned by to_string,
these are generally strings meant to be displayed on the console.
display.expand_frame_repr: [default: True] [currently: True]
: boolean
Whether to print out the full DataFrame repr for wide DataFrames
across multiple lines, 'max_columns' is still respected, but the output will
wrap-around across multiple "pages" if it width exceeds 'display.width'.
display.float_format: [default: None] [currently: None]
: callable
The callable should accept a floating point number and return
a string with the desired format of the number. This is used
in some places like SeriesFormatter.
See core.format.EngFormatter for an example.
display.height: [default: 60] [currently: 1000]
: int
Deprecated.
(Deprecated, use 'display.height' instead.)
display.line_width: [default: 80] [currently: 1000]
: int
Deprecated.
(Deprecated, use 'display.width' instead.)
display.max_columns: [default: 20] [currently: 500]
: int
max_rows and max_columns are used in __repr__() methods to decide if
to_string() or info() is used to render an object to a string. In case
python/IPython is running in a terminal this can be set to 0 and pandas
will correctly auto-detect the width the terminal and swap to a smaller
format in case all columns would not fit vertically. The IPython notebook,
IPython qtconsole, or IDLE do not run in a terminal and hence it is not
possible to do correct auto-detection.
'None' value means unlimited.
display.max_colwidth: [default: 50] [currently: 50]
: int
The maximum width in characters of a column in the repr of
a pandas data structure. When the column overflows, a "..."
placeholder is embedded in the output.
display.max_info_columns: [default: 100] [currently: 100]
: int
max_info_columns is used in DataFrame.info method to decide if
per column information will be printed.
display.max_info_rows: [default: 1690785] [currently: 1690785]
: int or None
max_info_rows is the maximum number of rows for which a frame will
perform a null check on its columns when repr'ing To a console.
The default is 1,000,000 rows. So, if a DataFrame has more
1,000,000 rows there will be no null check performed on the
columns and thus the representation will take much less time to
display in an interactive session. A value of None means always
perform a null check when repr'ing.
display.max_rows: [default: 60] [currently: 500]
: int
This sets the maximum number of rows pandas should output when printing
out various output. For example, this value determines whether the repr()
for a dataframe prints out fully or just a summary repr.
'None' value means unlimited.
display.max_seq_items: [default: None] [currently: None]
: int or None
when pretty-printing a long sequence, no more then 'max_seq_items'
will be printed. If items are ommitted, they will be denoted by the addition
of "..." to the resulting string.
If set to None, the number of items to be printed is unlimited.
display.mpl_style: [default: None] [currently: None]
: bool
Setting this to 'default' will modify the rcParams used by matplotlib
to give plots a more pleasing visual style by default.
Setting this to None/False restores the values to their initial value.
display.multi_sparse: [default: True] [currently: True]
: boolean
"sparsify" MultiIndex display (don't display repeated
elements in outer levels within groups)
display.notebook_repr_html: [default: True] [currently: True]
: boolean
When True, IPython notebook will use html representation for
pandas objects (if it is available).
display.pprint_nest_depth: [default: 3] [currently: 3]
: int
Controls the number of nested levels to process when pretty-printing
display.precision: [default: 7] [currently: 7]
: int
Floating point output precision (number of significant digits). This is
only a suggestion
display.width: [default: 80] [currently: 1000]
: int
Width of the display in characters. In case python/IPython is running in
a terminal this can be set to None and pandas will correctly auto-detect the
width.
Note that the IPython notebook, IPython qtconsole, or IDLE do not run in a
terminal and hence it is not possible to correctly detect the width.
mode.sim_interactive: [default: False] [currently: False]
: boolean
Whether to simulate interactive mode for purposes of testing
mode.use_inf_as_null: [default: False] [currently: False]
: boolean
True means treat None, NaN, INF, -INF as null (old way),
False means None and NaN are null, but INF, -INF are not null
(new way).
Call def: pd.set_option(self, *args, **kwds)
ОБНОВЛЕНИЕ: более старая информация о версии, большая часть этого устарела.
Как упомянуто в @bmu mentioned, 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]()
Ответ 2
Попробуйте следующее:
pd.set_option('display.expand_frame_repr', False)
Из документации:
display.expand_frame_repr: boolean
Чтобы распечатать полное представление DataFrame для широких DataFrames в нескольких строках, max_columns по-прежнему соблюдается, но вывод будет охватывать несколько "страниц", если его ширина превышает display.width. [default: True] [в настоящее время: True]
Смотрите: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.set_option.html
Ответ 3
Если вы хотите временно установить параметры для отображения одного большого DataFrame, вы можете использовать option_context:
with pd.option_context('display.max_rows', -1, 'display.max_columns', 5):
print df
Значения параметров автоматически восстанавливаются при выходе из блока with
.
Ответ 4
Только использование этих 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
Ответ 5
Установите максимальную ширину столбца, используя:
pd.set_option('max_colwidth', 800)
Этот конкретный оператор устанавливает максимальную ширину в 800 пикселей на столбец.
Ответ 6
Вы можете настроить параметры печати панд с помощью 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
только если выходные данные to_string
в консоль (см. set_printoptions
документации 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
Ответ 7
Вы можете использовать print df.describe().to_string()
, чтобы заставить его отобразить всю таблицу. (Вы можете использовать to_string()
как это для любого DataFrame. Результат describe
- это только сам DataFrame.)
8 - количество строк в DataFrame, содержащее "описание" (потому что describe
вычисляет 8 статистических данных, min, max, mean и т.д.).
Ответ 8
Вы можете установить выходной дисплей в соответствии с текущей шириной терминала:
pd.set_option('display.width', pd.util.terminal.get_terminal_size()[0])
Ответ 9
В соответствии с docs для v0.18.0, если вы работаете на терминале (то есть не в iPython ноутбуке, qtconsole или IDLE) это 2-лайнер, чтобы Pandas автоматически определить ширину экрана и адаптироваться "на лету" с количеством столбцов, которые он показывает:
pd.set_option('display.large_repr', 'truncate')
pd.set_option('display.max_columns', 0)
Ответ 10
Кажется, что все вышеперечисленные ответы решают проблему. Еще один момент: вместо pd.set_option('option_name')
вы можете использовать (автозаполнение)
pd.options.display.width = None
См. Документ Pandas: параметры и настройки:
Параметры имеют полное имя "без точек", не учитывающее регистр (например, 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, qtconsole IPython или IDLE не работают в терминале и, следовательно, невозможно выполнить правильное автоматическое обнаружение. " None
значения означает неограниченное. [акцент не в оригинале]
для параметра width
:
Ширина дисплея в символах. В случае, если python/IPython запущен в терминале, это может быть установлено на None
а pandas будет автоматически определять ширину. Обратите внимание, что IPython-ноутбук, qtconsole IPython или IDLE не работают в терминале и, следовательно, невозможно правильно определить ширину.
Ответ 11
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
Ответ 12
Я использовал эти настройки, когда масштаб данных высок.
# 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)
Вы можете сослаться на документацию здесь
Ответ 13
Если вы не хотите связываться с опциями отображения и хотите просто увидеть этот конкретный список столбцов, не раскрывая каждый просматриваемый кадр данных, вы можете попробовать:
df.columns.values
Ответ 14
Вы также можете попробовать в цикле:
for col in df.columns:
print(col)
Ответ 15
Если вы используете Spyder (3.1.4) и консоль Ipython отображает столбцы вашего информационного кадра в следующей строке вместо одной строки, затем откройте Tools--> Preferences--> Editor, отметьте "Показать вертикальную линию после" и увеличить число до желаемого значения.
Это сработало для меня.
Ответ 16
df.columns.values
- единственная команда, которая работала для python 3 в блокноте jupyter.