写点什么

Pandas 高级教程之: 自定义选项

发布于: 3 小时前

简介

pandas 有一个 option 系统可以控制 pandas 的展示情况,一般来说我们不需要进行修改,但是不排除特殊情况下的修改需求。本文将会详细讲解 pandas 中的 option 设置。

常用选项

pd.options.display 可以控制展示选项,比如设置最大展示行数:

In [1]: import pandas as pd
In [2]: pd.options.display.max_rowsOut[2]: 15
In [3]: pd.options.display.max_rows = 999
In [4]: pd.options.display.max_rowsOut[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"))   ....: 105
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]: dfOut[25]: 0 10 0.469112 -0.2828631 -1.509059 -1.1356322 1.212112 -0.1732153 0.119209 -1.0442364 -0.861849 -2.1045695 -0.494929 1.0718046 0.721555 -0.706771
In [26]: pd.set_option("max_rows", 5)
In [27]: dfOut[27]: 0 10 0.469112 -0.2828631 -1.509059 -1.135632.. ... ...5 -0.494929 1.0718046 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]: dfOut[46]: 0 1 2 3 4 5 6 7 8 90 -0.954208 1.462696 -1.743161 -0.826591 -0.345352 1.314232 0.690579 0.995761 2.396780 0.0148711 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.2428619 -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]: dfOut[48]: <class 'pandas.core.frame.DataFrame'>RangeIndex: 10 entries, 0 to 9Data 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 float64dtypes: 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]: dfOut[53]: 0 1 2 30 foo bar bim uncomfortably long string1 horse cow banana apple
In [54]: pd.set_option("max_colwidth", 6)
In [55]: dfOut[55]: 0 1 2 30 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]: dfOut[72]: 0 1 2 3 40 -1.1506406 -0.7983341 -0.5576966 0.3813531 1.33712171 -1.5310949 1.3314582 -0.5713290 -0.0266708 -1.08566302 -1.1147378 -0.0582158 -0.4867681 1.6851483 0.11257233 -1.4953086 0.8984347 -0.1482168 -1.5960698 0.15965304 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]: dfOut[77]: 0 1 2 3 4 50 1.2884 0.2946 -1.1658 0.8470 -0.6856 0.60911 -0.3040 0.6256 -0.0593 0.2497 1.1039 -1.08752 1.9980 -0.2445 0.1362 0.8863 -1.3507 -0.88633 -1.0133 1.9209 -0.3882 -2.3144 0.6655 0.40264 0.3996 -1.7660 0.8504 0.3881 0.9923 0.74415 -0.7398 -1.0549 -0.1796 0.6396 1.5850 1.9067
In [78]: pd.set_option("chop_threshold", 0.5)
In [79]: dfOut[79]: 0 1 2 3 4 50 1.2884 0.0000 -1.1658 0.8470 -0.6856 0.60911 0.0000 0.6256 0.0000 0.0000 1.1039 -1.08752 1.9980 0.0000 0.0000 0.8863 -1.3507 -0.88633 -1.0133 1.9209 0.0000 -2.3144 0.6655 0.00004 0.0000 -1.7660 0.8504 0.0000 0.9923 0.74415 -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]: dfOut[83]: A B C0 0.1040 0.1 0.01 0.1741 0.5 0.02 -0.4395 0.4 0.03 -0.7413 0.8 0.04 -0.0797 0.4 0.05 -0.9229 0.3 0.0
In [84]: pd.set_option("colheader_justify", "left")
In [85]: dfOut[85]: A B C 0 0.1040 0.1 0.01 0.1741 0.5 0.02 -0.4395 0.4 0.03 -0.7413 0.8 0.04 -0.0797 0.4 0.05 -0.9229 0.3 0.0
复制代码

常见的选项表格:

本文已收录于 http://www.flydean.com/14-python-pandas-options/

最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!

发布于: 3 小时前阅读数: 2
用户头像

关注公众号:程序那些事,更多精彩等着你! 2020.06.07 加入

最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧,尽在公众号:程序那些事!

评论

发布
暂无评论
Pandas高级教程之:自定义选项