Options and Settings¶
Overview¶
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
还有一个由5个相关函数组成的API,可从pandas
命名空间直接获得:
get_option()
/set_option()
- 获取/设置单个选项的值。reset_option()
- 将一个或多个选项重置为其默认值。describe_option()
- 打印一个或多个选项的描述。option_context()
- 使用一组选项执行代码块,这些选项在执行后还原为之前的设置。
注意:开发人员可以查看pandas / core / config.py了解更多信息。
上面的所有函数都接受一个regexp模式(re.search
style)作为参数,因此传入一个子字符串将工作 - 只要它是明确的:
In [5]: pd.get_option("display.max_rows")
Out[5]: 999
In [6]: pd.set_option("display.max_rows",101)
In [7]: pd.get_option("display.max_rows")
Out[7]: 101
In [8]: pd.set_option("max_r",102)
In [9]: pd.get_option("display.max_rows")
Out[9]: 102
以下将不会起作用,因为它匹配多个选项名称,例如display.max_colwidth
,display.max_rows
,display.max_columns
:
In [10]: try:
....: pd.get_option("column")
....: except KeyError as e:
....: print(e)
....:
'Pattern matched multiple keys'
注意:如果在将来的版本中添加具有相似名称的新选项,使用此形式的缩写可能会导致代码断开。
您可以使用describe_option
获取可用选项及其说明的列表。当调用时没有参数describe_option
将打印出所有可用选项的描述。
Getting and Setting Options¶
如上所述,从pandas命名空间可以获得get_option()
和set_option()
。要更改选项,请调用set_option('option regex', new_value)
In [11]: pd.get_option('mode.sim_interactive')
Out[11]: False
In [12]: pd.set_option('mode.sim_interactive', True)
In [13]: pd.get_option('mode.sim_interactive')
Out[13]: True
注意:选项'mode.sim_interactive'主要用于调试目的。
所有选项也有默认值,您可以使用reset_option
来做到这一点:
In [14]: pd.get_option("display.max_rows")
Out[14]: 60
In [15]: pd.set_option("display.max_rows",999)
In [16]: pd.get_option("display.max_rows")
Out[16]: 999
In [17]: pd.reset_option("display.max_rows")
In [18]: pd.get_option("display.max_rows")
Out[18]: 60
也可以一次重置多个选项(使用正则表达式):
In [19]: pd.reset_option("^display")
height has been deprecated.
line_width has been deprecated, use display.width instead (currently both are
identical)
option_context
上下文管理器已通过顶级API公开,允许您使用给定的选项值执行代码。当您使用块退出时,选项值会自动恢复:
In [20]: with pd.option_context("display.max_rows",10,"display.max_columns", 5):
....: print(pd.get_option("display.max_rows"))
....: print(pd.get_option("display.max_columns"))
....:
10
5
In [21]: print(pd.get_option("display.max_rows"))
60
In [22]: print(pd.get_option("display.max_columns"))
20
Setting Startup Options in python/ipython Environment¶
使用python / ipython环境的启动脚本导入pandas和设置选项使得使用pandas更有效率。为此,请在所需配置文件的启动目录中创建.py或.ipy脚本。可以在以下位置找到启动文件夹位于缺省ipython概要文件中的示例:
$IPYTHONDIR/profile_default/startup
有关详细信息,请参阅ipython文档。下面显示了一个用于pandas的示例启动脚本:
import pandas as pd
pd.set_option('display.max_rows', 999)
pd.set_option('precision', 5)
Frequently Used Options¶
以下是更频繁使用的显示选项的演练。
display.max_rows
和display.max_columns
设置在精美打印框架时显示的最大行数和列数。截断的行由省略号替换。
In [23]: df = pd.DataFrame(np.random.randn(7,2))
In [24]: pd.set_option('max_rows', 7)
In [25]: df
Out[25]:
0 1
0 0.469112 -0.282863
1 -1.509059 -1.135632
2 1.212112 -0.173215
3 0.119209 -1.044236
4 -0.861849 -2.104569
5 -0.494929 1.071804
6 0.721555 -0.706771
In [26]: pd.set_option('max_rows', 5)
In [27]: df
Out[27]:
0 1
0 0.469112 -0.282863
1 -1.509059 -1.135632
.. ... ...
5 -0.494929 1.071804
6 0.721555 -0.706771
[7 rows x 2 columns]
In [28]: pd.reset_option('max_rows')
display.expand_frame_repr
允许数据框架的表示在页面之间展开,包括整个列与行。
In [29]: df = pd.DataFrame(np.random.randn(5,10))
In [30]: pd.set_option('expand_frame_repr', True)
In [31]: df
Out[31]:
0 1 2 3 4 5 6 \
0 -1.039575 0.271860 -0.424972 0.567020 0.276232 -1.087401 -0.673690
1 0.404705 0.577046 -1.715002 -1.039268 -0.370647 -1.157892 -1.344312
2 1.643563 -1.469388 0.357021 -0.674600 -1.776904 -0.968914 -1.294524
3 -0.013960 -0.362543 -0.006154 -0.923061 0.895717 0.805244 -1.206412
4 -1.170299 -0.226169 0.410835 0.813850 0.132003 -0.827317 -0.076467
7 8 9
0 0.113648 -1.478427 0.524988
1 0.844885 1.075770 -0.109050
2 0.413738 0.276662 -0.472035
3 2.565646 1.431256 1.340309
4 -1.187678 1.130127 -1.436737
In [32]: pd.set_option('expand_frame_repr', False)
In [33]: df
Out[33]:
0 1 2 3 4 5 6 7 8 9
0 -1.039575 0.271860 -0.424972 0.567020 0.276232 -1.087401 -0.673690 0.113648 -1.478427 0.524988
1 0.404705 0.577046 -1.715002 -1.039268 -0.370647 -1.157892 -1.344312 0.844885 1.075770 -0.109050
2 1.643563 -1.469388 0.357021 -0.674600 -1.776904 -0.968914 -1.294524 0.413738 0.276662 -0.472035
3 -0.013960 -0.362543 -0.006154 -0.923061 0.895717 0.805244 -1.206412 2.565646 1.431256 1.340309
4 -1.170299 -0.226169 0.410835 0.813850 0.132003 -0.827317 -0.076467 -1.187678 1.130127 -1.436737
In [34]: pd.reset_option('expand_frame_repr')
display.large_repr
可让您选择是否将超过max_columns
或max_rows
的数据框显示为截断框架或汇总。
In [35]: df = pd.DataFrame(np.random.randn(10,10))
In [36]: pd.set_option('max_rows', 5)
In [37]: pd.set_option('large_repr', 'truncate')
In [38]: df
Out[38]:
0 1 2 3 4 5 6 \
0 -1.413681 1.607920 1.024180 0.569605 0.875906 -2.211372 0.974466
1 0.545952 -1.219217 -1.226825 0.769804 -1.281247 -0.727707 -0.121306
.. ... ... ... ... ... ... ...
8 -2.484478 -0.281461 0.030711 0.109121 1.126203 -0.977349 1.474071
9 -1.071357 0.441153 2.353925 0.583787 0.221471 -0.744471 0.758527
7 8 9
0 -2.006747 -0.410001 -0.078638
1 -0.097883 0.695775 0.341734
.. ... ... ...
8 -0.064034 -1.282782 0.781836
9 1.729689 -0.964980 -0.845696
[10 rows x 10 columns]
In [39]: pd.set_option('large_repr', 'info')
In [40]: df
Out[40]:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 10 entries, 0 to 9
Data columns (total 10 columns):
0 10 non-null float64
1 10 non-null float64
2 10 non-null float64
3 10 non-null float64
4 10 non-null float64
5 10 non-null float64
6 10 non-null float64
7 10 non-null float64
8 10 non-null float64
9 10 non-null float64
dtypes: float64(10)
memory usage: 872.0 bytes
In [41]: pd.reset_option('large_repr')
In [42]: pd.reset_option('max_rows')
display.max_colwidth
设置列的最大宽度。此长度或更长的单元格将被省略号截断。
In [43]: df = pd.DataFrame(np.array([['foo', 'bar', 'bim', 'uncomfortably long string'],
....: ['horse', 'cow', 'banana', 'apple']]))
....:
In [44]: pd.set_option('max_colwidth',40)
In [45]: df
Out[45]:
0 1 2 3
0 foo bar bim uncomfortably long string
1 horse cow banana apple
In [46]: pd.set_option('max_colwidth', 6)
In [47]: df
Out[47]:
0 1 2 3
0 foo bar bim un...
1 horse cow ba... apple
In [48]: pd.reset_option('max_colwidth')
display.max_info_columns
设置将给出列向列信息的阈值。
In [49]: df = pd.DataFrame(np.random.randn(10,10))
In [50]: pd.set_option('max_info_columns', 11)
In [51]: df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 10 entries, 0 to 9
Data columns (total 10 columns):
0 10 non-null float64
1 10 non-null float64
2 10 non-null float64
3 10 non-null float64
4 10 non-null float64
5 10 non-null float64
6 10 non-null float64
7 10 non-null float64
8 10 non-null float64
9 10 non-null float64
dtypes: float64(10)
memory usage: 872.0 bytes
In [52]: pd.set_option('max_info_columns', 5)
In [53]: df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 10 entries, 0 to 9
Columns: 10 entries, 0 to 9
dtypes: float64(10)
memory usage: 872.0 bytes
In [54]: pd.reset_option('max_info_columns')
display.max_info_rows
:df.info()
通常会显示每列的空值。对于大型帧,这可能会很慢。max_info_rows
和max_info_cols
仅将此空检查限制为指定较小尺寸的帧。请注意,您可以指定选项df.info(null_counts=True)
以覆盖显示特定框架。
In [55]: df =pd.DataFrame(np.random.choice([0,1,np.nan], size=(10,10)))
In [56]: df
Out[56]:
0 1 2 3 4 5 6 7 8 9
0 0.0 1.0 1.0 0.0 1.0 1.0 0.0 NaN 1.0 NaN
1 1.0 NaN 0.0 0.0 1.0 1.0 NaN 1.0 0.0 1.0
2 NaN NaN NaN 1.0 1.0 0.0 NaN 0.0 1.0 NaN
3 0.0 1.0 1.0 NaN 0.0 NaN 1.0 NaN NaN 0.0
4 0.0 1.0 0.0 0.0 1.0 0.0 0.0 NaN 0.0 0.0
5 0.0 NaN 1.0 NaN NaN NaN NaN 0.0 1.0 NaN
6 0.0 1.0 0.0 0.0 NaN 1.0 NaN NaN 0.0 NaN
7 0.0 NaN 1.0 1.0 NaN 1.0 1.0 1.0 1.0 NaN
8 0.0 0.0 NaN 0.0 NaN 1.0 0.0 0.0 NaN NaN
9 NaN NaN 0.0 NaN NaN NaN 0.0 1.0 1.0 NaN
In [57]: pd.set_option('max_info_rows', 11)
In [58]: df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 10 entries, 0 to 9
Data columns (total 10 columns):
0 8 non-null float64
1 5 non-null float64
2 8 non-null float64
3 7 non-null float64
4 5 non-null float64
5 7 non-null float64
6 6 non-null float64
7 6 non-null float64
8 8 non-null float64
9 3 non-null float64
dtypes: float64(10)
memory usage: 872.0 bytes
In [59]: pd.set_option('max_info_rows', 5)
In [60]: df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 10 entries, 0 to 9
Data columns (total 10 columns):
0 float64
1 float64
2 float64
3 float64
4 float64
5 float64
6 float64
7 float64
8 float64
9 float64
dtypes: float64(10)
memory usage: 872.0 bytes
In [61]: pd.reset_option('max_info_rows')
display.precision
以小数位数设置输出显示精度。这只是一个建议。
In [62]: df = pd.DataFrame(np.random.randn(5,5))
In [63]: pd.set_option('precision',7)
In [64]: df
Out[64]:
0 1 2 3 4
0 -2.0490276 2.8466122 -1.2080493 -0.4503923 2.4239054
1 0.1211080 0.2669165 0.8438259 -0.2225400 2.0219807
2 -0.7167894 -2.2244851 -1.0611370 -0.2328247 0.4307933
3 -0.6654779 1.8298075 -1.4065093 1.0782481 0.3227741
4 0.2003243 0.8900241 0.1948132 0.3516326 0.4488815
In [65]: pd.set_option('precision',4)
In [66]: df
Out[66]:
0 1 2 3 4
0 -2.0490 2.8466 -1.2080 -0.4504 2.4239
1 0.1211 0.2669 0.8438 -0.2225 2.0220
2 -0.7168 -2.2245 -1.0611 -0.2328 0.4308
3 -0.6655 1.8298 -1.4065 1.0782 0.3228
4 0.2003 0.8900 0.1948 0.3516 0.4489
display.chop_threshold
设置当显示一系列DataFrame时,pandas是否为0。注意,这不会影响存储数字的精度。
In [67]: df = pd.DataFrame(np.random.randn(6,6))
In [68]: pd.set_option('chop_threshold', 0)
In [69]: df
Out[69]:
0 1 2 3 4 5
0 -0.1979 0.9657 -1.5229 -0.1166 0.2956 -1.0477
1 1.6406 1.9058 2.7721 0.0888 -1.1442 -0.6334
2 0.9254 -0.0064 -0.8204 -0.6009 -1.0393 0.8248
3 -0.8241 -0.3377 -0.9278 -0.8401 0.2485 -0.1093
4 0.4320 -0.4607 0.3365 -3.2076 -1.5359 0.4098
5 -0.6731 -0.7411 -0.1109 -2.6729 0.8645 0.0609
In [70]: pd.set_option('chop_threshold', .5)
In [71]: df
Out[71]:
0 1 2 3 4 5
0 0.0000 0.9657 -1.5229 0.0000 0.0000 -1.0477
1 1.6406 1.9058 2.7721 0.0000 -1.1442 -0.6334
2 0.9254 0.0000 -0.8204 -0.6009 -1.0393 0.8248
3 -0.8241 0.0000 -0.9278 -0.8401 0.0000 0.0000
4 0.0000 0.0000 0.0000 -3.2076 -1.5359 0.0000
5 -0.6731 -0.7411 0.0000 -2.6729 0.8645 0.0000
In [72]: pd.reset_option('chop_threshold')
display.colheader_justify
控制标头的对齐。选项是“right”和“left”。
In [73]: df = pd.DataFrame(np.array([np.random.randn(6), np.random.randint(1,9,6)*.1, np.zeros(6)]).T,
....: columns=['A', 'B', 'C'], dtype='float')
....:
In [74]: pd.set_option('colheader_justify', 'right')
In [75]: df
Out[75]:
A B C
0 0.9331 0.3 0.0
1 0.2888 0.2 0.0
2 1.3250 0.2 0.0
3 0.5892 0.7 0.0
4 0.5314 0.1 0.0
5 -1.1987 0.7 0.0
In [76]: pd.set_option('colheader_justify', 'left')
In [77]: df
Out[77]:
A B C
0 0.9331 0.3 0.0
1 0.2888 0.2 0.0
2 1.3250 0.2 0.0
3 0.5892 0.7 0.0
4 0.5314 0.1 0.0
5 -1.1987 0.7 0.0
In [78]: pd.reset_option('colheader_justify')
Available Options¶
选项 | 默认 | 功能 |
---|---|---|
display.chop_threshold | 没有 | 如果设置为浮点值,小于给定阈值的所有浮点值将由repr和friends显示为0。 |
display.colheader_justify | 对 | 控制列标题的对齐方式。用于DataFrameFormatter。 |
display.column_space | 12 | 没有可用的描述。 |
display.date_dayfirst | 假 | 当为True时,打印和解析日期以天为前,例如20/01/2005 |
display.date_yearfirst | 假 | 当为True时,打印并解析年份为第一年的日期,例如2005/01/20 |
display.encoding | UTF-8 | 默认为检测到的控制台的编码。指定要用于to_string返回的字符串的编码,这些字符串通常是要显示在控制台上的字符串。 |
display.expand_frame_repr | 真正 | 是否打印出跨多行的宽数据帧的完整DataFrame repr,max_columns仍然受到尊重,但如果其宽度超过,输出将环绕多个“页面”display.width 。 |
display.float_format | 没有 | callable应该接受一个浮点数并返回一个具有所需数字格式的字符串。这在一些地方如SeriesFormatter中使用。有关示例,请参阅core.format.EngFormatter。 |
display.height | 60 | 已弃用。请改用display.max_rows。 |
display.large_repr | 截短 | 对于超过max_rows / max_cols的DataFrames,repr(和HTML repr)可以显示截断表(默认值为0.13),或者从df.info()(早期版本的pandas中的行为)切换到视图。允许的设置,['truncate','info'] |
display.latex.repr | 假 | 是否为支持它的jupyter前端生成一个乳胶DataFrame表示。 |
display.latex.escape | 真正 | 当使用to_latex方法时,在Dataframes中转义特殊字符。 |
display.latex.longtable | 假 | 指定Dataframe的to_latex方法是否使用longtable格式。 |
display.line_width | 80 | 已弃用。请改用display.width。 |
display.max_columns | 20 | max_rows和max_columns在__repr __()方法中使用,以决定是否使用to_string()或info()将对象渲染为字符串。如果python / IPython在终端中运行,这可以设置为0,并且pandas将正确地自动检测终端的宽度,并且在所有列都不适合垂直时交换为较小的格式。IPython笔记本,IPython qtconsole或IDLE不在终端中运行,因此无法进行正确的自动检测。“无”值意味着无限。 |
display.max_colwidth | 50 | pandas数据结构的repr中的列的最大字符宽度。当列溢出时,在输出中嵌入一个“...”占位符。 |
display.max_info_columns | 100 | max_info_columns用于DataFrame.info方法中,以确定是否将打印每列信息。 |
display.max_info_rows | 1690785 | df.info()通常会显示每个列的空值。对于大型帧,这可能会很慢。max_info_rows和max_info_cols仅将此空检查限制到指定的较小维度的帧。 |
display.max_rows | 60 | 这设置了打印输出各种输出时pandas应该输出的最大行数。例如,此值确定数据帧的repr()是完全打印还是仅打印摘要repr。“无”值意味着无限。 |
display.max_seq_items | 100 | 当漂亮打印一个长序列时,不会再打印max_seq_items。如果省略项目,则通过向生成的字符串添加“...”来表示。如果设置为无,则要打印的项目数不受限制。 |
display.memory_usage | 真正 | 这指定在调用df.info()方法时是否应显示DataFrame的内存使用情况。 |
display.multi_sparse | 真正 | “Sparsify”MultiIndex显示(不在组内的外层中显示重复的元素) |
display.notebook_repr_html | 真正 | 当为True时,IPython笔记本将使用html表示形式的pandas对象(如果可用)。 |
display.pprint_nest_depth | 3 | 控制漂亮打印时要处理的嵌套级别的数量 |
display.precision | 6 | 浮点输出精度在小数后的位数,用于常规格式以及科学记数法。类似于numpy的precision 打印选项 |
display.show_dimensions | 截短 | 是否在DataFrame repr结尾打印尺寸。如果指定了“truncate”,则只有在框架被截断时才打印出尺寸(例如,不显示所有行和/或列) |
display.width | 80 | 显示的宽度(以字符为单位)。如果python / IPython在终端中运行,这可以设置为None,并且pandas将正确地自动检测宽度。请注意,IPython笔记本,IPython qtconsole或IDLE不在终端中运行,因此无法正确检测宽度。 |
html.border | 1 | 在DataFrame HTML代码的<table> 标记中插入border=value 属性。 |
io.excel.xls.writer | xlwt | 'xls'文件的默认Excel writer引擎。 |
io.excel.xlsm.writer | openpyxl | 'xlsm'文件的默认Excel写入器引擎。可用选项:'openpyxl'(默认值)。 |
io.excel.xlsx.writer | openpyxl | 'xlsx'文件的默认Excel写入器引擎。 |
io.hdf.default_format | 没有 | 默认格式写入格式,如果None,则put将默认为'fixed',append将默认为'table' |
io.hdf.dropna_table | 真正 | 在追加到表时删除所有的nan行 |
mode.chained_assignment | 警告 | 如果尝试使用链接分配,则引发异常,警告或无操作,默认值为warn |
mode.sim_interactive | 假 | 是否模拟交互模式以进行测试 |
mode.use_inf_as_null | 假 | True表示无,NaN,-INF,INF为空(旧方式),False表示无,NaN为空,但INF,-INF不为空(新方式)。 |
Number Formatting¶
pandas还允许您设置数字在控制台中的显示方式。此选项不是通过set_options
API设置的。
使用set_eng_float_format
函数更改pandas对象的浮点格式,以生成特定格式。
例如:
In [79]: import numpy as np
In [80]: pd.set_eng_float_format(accuracy=3, use_eng_prefix=True)
In [81]: s = pd.Series(np.random.randn(5), index=['a', 'b', 'c', 'd', 'e'])
In [82]: s/1.e3
Out[82]:
a -236.866u
b 846.974u
c -685.597u
d 609.099u
e -303.961u
dtype: float64
In [83]: s/1.e6
Out[83]:
a -236.866n
b 846.974n
c -685.597n
d 609.099n
e -303.961n
dtype: float64
Unicode Formatting¶
警告
仅在实际需要时使用。
一些东亚国家使用Unicode字符,其宽度对应于2个字母。如果DataFrame或Series包含这些字符,则默认输出无法正确对齐。
注意
为每个输出附加屏幕截图以显示实际结果。
In [84]: df = pd.DataFrame({u'国籍': ['UK', u'日本'], u'名前': ['Alice', u'しのぶ']})
In [85]: df;
启用display.unicode.east_asian_width
允许大熊猫检查每个字符的“东亚宽度”属性。通过检查此属性可以正确对齐这些字符,但它比标准的len
函数需要更长的时间。
In [86]: pd.set_option('display.unicode.east_asian_width', True)
In [87]: df;
此外,Unicode包含宽度为“模糊”的字符。这些字符的宽度应为1或2,具体取决于终端设置或编码。由于无法与Python区分开,因此添加了display.unicode.ambiguous_as_wide
选项来处理此问题。
默认情况下,“模糊”字符的宽度,“¡”(反转感叹号)在下面的示例中,被视为1。
In [88]: df = pd.DataFrame({'a': ['xxx', u'¡¡'], 'b': ['yyy', u'¡¡']})
In [89]: df;
启用display.unicode.ambiguous_as_wide
让pandas将这些字符的宽度设为2。请注意,只有在启用display.unicode.east_asian_width
时,此选项才有效。确认开始位置已更改,但未正确对齐,因为设置与此环境不匹配。
In [90]: pd.set_option('display.unicode.ambiguous_as_wide', True)
In [91]: df;