14-python-pandas-options
14. Pandas高级教程之:自定义选项
简介
pandas有一个option系统可以控制pandas的展示情况,一般来说我们不需要进行修改,但是不排除特殊情况下的修改需求。本文将会详细讲解pandas中的option设置。
常用选项
pd.options.display 可以控制展示选项,比如设置最大展示行数:
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
除此之外,pd还有4个相关的方法来对option进行修改:
get_option() / set_option() - get/set 单个option的值
reset_option() - 重设某个option的值到默认值
describe_option() - 打印某个option的值
option_context() - 在代码片段中执行某些option的更改
如下所示:
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
get/set 选项
pd.get_option 和 pd.set_option 可以用来获取和修改特定的option:
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
使用 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
使用正则表达式可以重置多条option:
In [19]: pd.reset_option("^display")
option_context
在代码环境中修改option,代码结束之后,option会被还原:
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"))
0
经常使用的选项
下面我们看一些经常使用选项的例子:
最大展示行数
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]
超出数据展示
display.large_repr 可以选择对于超出的行或者列的展示行为,可以是truncated frame:
In [43]: df = pd.DataFrame(np.random.randn(10, 10))
In [44]: pd.set_option("max_rows", 5)
In [45]: pd.set_option("large_repr", "truncate")
In [46]: df
Out[46]:
0 1 2 3 4 5 6 7 8 9
0 -0.954208 1.462696 -1.743161 -0.826591 -0.345352 1.314232 0.690579 0.995761 2.396780 0.014871
1 3.357427 -0.317441 -1.236269 0.896171 -0.487602 -0.082240 -2.182937 0.380396 0.084844 0.432390
.. ... ... ... ... ... ... ... ... ... ...
8 -0.303421 -0.858447 0.306996 -0.028665 0.384316 1.574159 1.588931 0.476720 0.473424 -0.242861
9 -0.014805 -0.284319 0.650776 -1.461665 -1.137707 -0.891060 -0.693921 1.613616 0.464000 0.227371
[10 rows x 10 columns]
也可以是统计信息:
In [47]: pd.set_option("large_repr", "info")
In [48]: df
Out[48]:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 10 entries, 0 to 9
Data columns (total 10 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 0 10 non-null float64
1 1 10 non-null float64
2 2 10 non-null float64
3 3 10 non-null float64
4 4 10 non-null float64
5 5 10 non-null float64
6 6 10 non-null float64
7 7 10 non-null float64
8 8 10 non-null float64
9 9 10 non-null float64
dtypes: float64(10)
memory usage: 928.0 bytes
最大列的宽度
display.max_colwidth 用来设置最大列的宽度。
In [51]: df = pd.DataFrame(
....: np.array(
....: [
....: ["foo", "bar", "bim", "uncomfortably long string"],
....: ["horse", "cow", "banana", "apple"],
....: ]
....: )
....: )
....:
In [52]: pd.set_option("max_colwidth", 40)
In [53]: df
Out[53]:
0 1 2 3
0 foo bar bim uncomfortably long string
1 horse cow banana apple
In [54]: pd.set_option("max_colwidth", 6)
In [55]: df
Out[55]:
0 1 2 3
0 foo bar bim un...
1 horse cow ba... apple
显示精度
display.precision
可以设置显示的精度:
In [70]: df = pd.DataFrame(np.random.randn(5, 5))
In [71]: pd.set_option("precision", 7)
In [72]: df
Out[72]:
0 1 2 3 4
0 -1.1506406 -0.7983341 -0.5576966 0.3813531 1.3371217
1 -1.5310949 1.3314582 -0.5713290 -0.0266708 -1.0856630
2 -1.1147378 -0.0582158 -0.4867681 1.6851483 0.1125723
3 -1.4953086 0.8984347 -0.1482168 -1.5960698 0.1596530
4 0.2621358 0.0362196 0.1847350 -0.2550694 -0.2710197
零转换的门槛
display.chop_threshold 可以设置将Series或者DF中数据展示为0的门槛:
In [75]: df = pd.DataFrame(np.random.randn(6, 6))
In [76]: pd.set_option("chop_threshold", 0)
In [77]: df
Out[77]:
0 1 2 3 4 5
0 1.2884 0.2946 -1.1658 0.8470 -0.6856 0.6091
1 -0.3040 0.6256 -0.0593 0.2497 1.1039 -1.0875
2 1.9980 -0.2445 0.1362 0.8863 -1.3507 -0.8863
3 -1.0133 1.9209 -0.3882 -2.3144 0.6655 0.4026
4 0.3996 -1.7660 0.8504 0.3881 0.9923 0.7441
5 -0.7398 -1.0549 -0.1796 0.6396 1.5850 1.9067
In [78]: pd.set_option("chop_threshold", 0.5)
In [79]: df
Out[79]:
0 1 2 3 4 5
0 1.2884 0.0000 -1.1658 0.8470 -0.6856 0.6091
1 0.0000 0.6256 0.0000 0.0000 1.1039 -1.0875
2 1.9980 0.0000 0.0000 0.8863 -1.3507 -0.8863
3 -1.0133 1.9209 0.0000 -2.3144 0.6655 0.0000
4 0.0000 -1.7660 0.8504 0.0000 0.9923 0.7441
5 -0.7398 -1.0549 0.0000 0.6396 1.5850 1.9067
上例中,绝对值< 0.5 的都会被展示为0 。
列头的对齐方向
display.colheader_justify 可以修改列头部文字的对齐方向:
In [81]: df = pd.DataFrame(
....: np.array([np.random.randn(6), np.random.randint(1, 9, 6) * 0.1, np.zeros(6)]).T,
....: columns=["A", "B", "C"],
....: dtype="float",
....: )
....:
In [82]: pd.set_option("colheader_justify", "right")
In [83]: df
Out[83]:
A B C
0 0.1040 0.1 0.0
1 0.1741 0.5 0.0
2 -0.4395 0.4 0.0
3 -0.7413 0.8 0.0
4 -0.0797 0.4 0.0
5 -0.9229 0.3 0.0
In [84]: pd.set_option("colheader_justify", "left")
In [85]: df
Out[85]:
A B C
0 0.1040 0.1 0.0
1 0.1741 0.5 0.0
2 -0.4395 0.4 0.0
3 -0.7413 0.8 0.0
4 -0.0797 0.4 0.0
5 -0.9229 0.3 0.0
常见的选项表格:
最后更新于