Options and Settings

原文:http://pandas.pydata.org/pandas-docs/stable/options.html

译者:飞龙 UsyiyiCN

校对:(虚位以待)

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命名空间直接获得:

注意:开发人员可以查看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_colwidthdisplay.max_rowsdisplay.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_rowsdisplay.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_columnsmax_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_rowsdf.info()通常会显示每列的空值。对于大型帧,这可能会很慢。max_info_rowsmax_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

要根据具体情况圆形浮动,您还可以使用round()round()

Unicode Formatting

警告

仅在实际需要时使用。

一些东亚国家使用Unicode字符,其宽度对应于2个字母。如果DataFrame或Series包含这些字符,则默认输出无法正确对齐。

注意

为每个输出附加屏幕截图以显示实际结果。

In [84]: df = pd.DataFrame({u'国籍': ['UK', u'日本'], u'名前': ['Alice', u'しのぶ']})

In [85]: df;
http://pandas.pydata.org/pandas-docs/version/0.19.2/_images/option_unicode01.png

启用display.unicode.east_asian_width允许大熊猫检查每个字符的“东亚宽度”属性。通过检查此属性可以正确对齐这些字符,但它比标准的len函数需要更长的时间。

In [86]: pd.set_option('display.unicode.east_asian_width', True)

In [87]: df;
http://pandas.pydata.org/pandas-docs/version/0.19.2/_images/option_unicode02.png

此外,Unicode包含宽度为“模糊”的字符。这些字符的宽度应为1或2,具体取决于终端设置或编码。由于无法与Python区分开,因此添加了display.unicode.ambiguous_as_wide选项来处理此问题。

默认情况下,“模糊”字符的宽度,“¡”(反转感叹号)在下面的示例中,被视为1。

In [88]: df = pd.DataFrame({'a': ['xxx', u'¡¡'], 'b': ['yyy', u'¡¡']})

In [89]: df;
http://pandas.pydata.org/pandas-docs/version/0.19.2/_images/option_unicode03.png

启用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;
http://pandas.pydata.org/pandas-docs/version/0.19.2/_images/option_unicode04.png