有没有办法在交互式或脚本执行模式下扩大输出显示?
具体来说,我在Pandas dataframe
上使用describe()函数。当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和describe()的目的是避免使用像 STATA 这样的第二个程序来进行基本的数据操作和调查。
Python / IDLE 2.7.3
熊猫0.8.1
Notepad ++ 6.1.4(UNICODE)
Windows Vista SP2
答案 0 :(得分:560)
更新:Pandas 0.23.4起
如果设置pd.options.display.width = 0
,pandas会自动检测终端窗口的大小。 (旧版本见底部。)
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(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's 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)
将永远不会切换到摘要视图。
答案 1 :(得分:155)
试试这个:
pd.set_option('display.expand_frame_repr', False)
来自文档:
display.expand_frame_repr:boolean
是否要跨多行打印出宽数据帧的完整DataFrame repr,仍然会遵守max_columns,但如果宽度超过display.width,则输出将在多个“页面”上进行环绕。 [默认:True] [当前:True]
请参阅:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.set_option.html
答案 2 :(得分:76)
如果您想暂时设置选项以显示一个大型DataFrame,可以使用option_context:
with pd.option_context('display.max_rows', -1, 'display.max_columns', 5):
print df
退出with
块时会自动恢复选项值。
答案 3 :(得分:42)
使用以下方式设置列最大宽度:
pd.set_option('max_colwidth', 800)
此特定语句将每列的最大宽度设置为800px。
答案 4 :(得分:40)
仅使用这3行对我有用:
void accept(T t)
Anaconda / Python 3.6.5 / pandas:0.23.0 / Visual Studio代码1.26
答案 5 :(得分:24)
您可以使用set_printoptions
调整pandas打印选项。
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
的文档字符串)。
在这种情况下,您可以BrenBarn的答案显式致电to_string
。
<强>更新强>
对于版本0.10,打印宽数据帧的方式为changed:
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
更多用于设置pandas选项的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
答案 6 :(得分:22)
您可以将输出显示设置为与当前终端宽度匹配:
pd.set_option('display.width', pd.util.terminal.get_terminal_size()[0])
答案 7 :(得分:19)
您可以使用print df.describe().to_string()
强制它显示整个表格。 (对于任何DataFrame,您可以使用to_string()
这样的结果。describe
的结果只是一个DataFrame本身。)
8是DataFrame中包含“description”的行数(因为describe
计算8个统计数据,min,max,mean等)。
答案 8 :(得分:13)
根据docs for v0.18.0,如果您在终端上运行(即不是iPython笔记本,qtconsole或IDLE),那么它就是2线,让Pandas自动检测您的屏幕宽度并在运行时调整显示的列数:
pd.set_option('display.large_repr', 'truncate')
pd.set_option('display.max_columns', 0)
答案 9 :(得分:4)
似乎以上所有答案都解决了这个问题。还有一点:您可以使用(自动完成)
代替pd.set_option('option_name')
pd.options.display.width = None
请参阅Pandas doc: Options and Settings:
选项具有完整的“点状样式”,不区分大小写的名称(例如
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
param:
显示的宽度(以字符为单位)。如果python / IPython在终端中运行,则可以将其设置为
None
,并且pandas将正确地自动检测宽度。请注意,IPython笔记本,IPython qtconsole或IDLE不在终端中运行,因此无法正确检测宽度。
答案 10 :(得分:3)
下面一行足以显示数据框中的所有列。
pd.set_option('display.max_columns', None)
答案 11 :(得分:2)
当数据规模很大时,我使用了这些设置。
# 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)
您可以参考文档here
答案 12 :(得分:2)
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
答案 13 :(得分:1)
您只需执行以下步骤,
您可以按以下方式更改熊猫max_columns功能的选项
import pandas as pd
pd.options.display.max_columns = 10
(这将显示10列,您可以根据需要进行更改)
就像您可以更改显示的行数一样,如下所示(如果您还需要更改最大行数)
pd.options.display.max_rows = 999
(这允许一次打印999行)
请参考doc来更改熊猫的不同选项/设置
答案 14 :(得分:1)
pd.options.display.max_columns = 100
您可以根据需要在max_columns中指定列数。
答案 15 :(得分:1)
您可以使用此自定义功能显示pandas Dataframe
的内容。
def display_all(df): # for any Dataframe df
with pd.option_context('display.max_rows',1000): # change number of rows accordingly
with pd.option_context('display.max_columns',1000): # change number of columns accordingly
display(df)
display_all(df.head()) # pass this function to your dataframe and Voila!
您不必将pd.set_option
用于整个笔记本,而只用于单个单元格。
答案 16 :(得分:1)
当打印 NumPy 数组时,下面会增加宽度。
它在 Jupyter Notebook 中取得了不错的结果。
import numpy as np
np.set_printoptions(linewidth=160)
答案 17 :(得分:0)
如果您不想弄乱您的显示选项,而只想查看这一特定的列列表,而无需扩展您查看的每个数据框,则可以尝试:
df.columns.values
答案 18 :(得分:0)
您也可以尝试循环:
for col in df.columns:
print(col)
答案 19 :(得分:0)
这些答案都不对我有用。其中有几个确实可以打印所有列,但是看起来很草率。就像所有信息一样,但格式不正确。我正在Neovim内部使用终端,所以我怀疑这是原因。
此迷你函数完全满足我的需要,只需在两个位置更改df_data
代表您的数据框名称(col_range
设置为大自然显示的熊猫,对我来说是5,但它可能对您来说更大或更小。
import math
col_range = 5
for _ in range(int(math.ceil(len(df_data.columns)/col_range))):
idx1 = _*col_range
idx2 = idx1+col_range
print(df_data.iloc[:, idx1:idx2].describe())