如同Excel,在python中也可以使用条件格式(conditional formatting),使用DataFrame.style属性是格式化与展示的好方法,这个属性返回一个Styler 对象。

本文主要说说在使用相应的style函数时候如何使用切片,在官方文档中是这样描述的:

Both Styler.apply, and Styler.applymap accept a subset keyword. This
allows you to apply styles to specific rows or columns, without having
to code that logic into your style function.

The value passed to subset behaves similar to slicing a DataFrame.

A scalar is treated as a column label
A list (or series or numpy array) (is treated as a column label )
A tuple is treated as (row_indexer, column_indexer)

Consider using pd.IndexSlice to construct the tuple for the last one

In [12]:df.style.apply(highlight_max, subset=['B', 'C', 'D'])Out[12]:A    B   C   D   E
0   1   1.32921     nan     -0.31628    -0.99081
1   2   -1.07082    -1.43871    0.564417    0.295722
2   3   -1.6264     0.219565    0.678805    1.88927
3   4   0.961538    0.104011    -0.481165   0.850229
4   5   1.45342     1.05774     0.165562    0.515018
5   6   -1.33694    0.562861    1.39285     -0.063328
6   7   0.121668    1.2076  -0.00204021     1.6278
7   8   0.354493    1.03753     -0.385684   0.519818
8   9   1.68658     -1.32596    1.42898     -2.08935
9   10  -0.12982    0.631523    -0.586538   0.29072

For row and column slicing, any valid indexer to .loc will work

In [13]:df.style.applymap(color_negative_red,subset=pd.IndexSlice[2:5, ['B', 'D']])Out[13]:A    B   C   D   E
0   1   1.32921     nan     -0.31628    -0.99081
1   2   -1.07082    -1.43871    0.564417    0.295722
2   3   -1.6264     0.219565    0.678805    1.88927
3   4   0.961538    0.104011    -0.481165   0.850229
4   5   1.45342     1.05774     0.165562    0.515018
5   6   -1.33694    0.562861    1.39285     -0.063328
6   7   0.121668    1.2076  -0.00204021     1.6278
7   8   0.354493    1.03753     -0.385684   0.519818
8   9   1.68658     -1.32596    1.42898     -2.08935
9   10  -0.12982    0.631523    -0.586538   0.29072

基本上表达的挺明白,但是遇到多级索引的情况下,文中并没有给出实例,我们进行实例演练:

# hierarchical indices and columns
index = pd.MultiIndex.from_product([[2013, 2014], [1, 2]],names=['year', 'visit'])
columns = pd.MultiIndex.from_product([['Bob', 'Guido', 'Sue'], ['HR', 'Temp']],names=['subject', 'type'])# mock some data
data = np.round(np.random.randn(4, 6), 1)
data[:, ::2] *= 10
data += 37# create the DataFrame
health_data = pd.DataFrame(data, index=index, columns=columns)
health_data

现在我们想对一级行索引为2的行进行标红:
从上面的官方文档中给出的subset的三种方式中,最后一种方式符合我们的需求。

#先定义格式函数:
def row1_red(val): return 'color:Magenta'

关键的问题在于如何正确的使用多级索引来达到我们的目的,先试一个,
在元组中使用切片将会导致语法错误:

health_data.style.applymap(row1_red,subset=[(:,2),])File "<ipython-input-54-e36b194f3f5e>", line 1health_data.style.applymap(row1_red,subset=[(:,2),])^SyntaxError: invalid syntax

可以通过显示使用Python内置的slice()函数构建期望的切片来绕过上面的限制。但更好的办法是使用IndexSlice对象,它是Pandas专门用来处理这种情形的。

而原文中也说了:
Consider using pd.IndexSlice to construct the tuple for the last one.

我们用pd.IndexSlice试一下,先单独对于数据集health_data使用:

health_data.loc[pd.IndexSlice[:,2],]


可见确实达到了效果

health_data.loc[pd.IndexSlice[:,2],:]

第二个位置写不写冒号都可以。

现在,我们用于Style属性:

health_data.style.applymap(row1_red,subset=(pd.IndexSlice[:,2],))


perfect,但是要注意两点:
1、我们给subset传递的是个元组;
2、跟直接用于DataFrame.loc中不一样,subset中元组的第二个参数直接空即可,如果写冒号,反而会报错:

甚至可以这样写:

health_data.style.applymap(row1_red,subset=pd.IndexSlice[pd.IndexSlice[:,2],:])

pd.IndexSlice也是比较灵活,但有时候也难以捉摸,有时间还是需要好好研究一下。

最后注意一个问题,在使用pd.IndexSlice时,只支持.loc,不支持.iloc.

Only label-based slicing is supported right now, not positional.

参考链接:
http://pandas.pydata.org/pandas-docs/stable/style.html
https://www.jianshu.com/p/342c81e89b98

python-----DataFrame.style (三、切片)相关推荐

  1. Python语言编程学习:numpy中的array格式数据切片与pandas中的dataframe格式数据切片、相互转换

    Python语言编程学习:numpy中的array格式数据切片与pandas中的dataframe格式数据切片.相互转换 目录 numpy中的array格式数据切片与pandas中的dataframe ...

  2. python dataframe切片_python pandas dataframe 行列选择,切片操作方法

    SQL中的select是根据列的名称来选取:Pandas则更为灵活,不但可根据列名称选取,还可以根据列所在的position(数字,在第几行第几列,注意pandas行列的position是从0开始)选 ...

  3. python coding style guide 的快速落地实践——业内python 编码风格就pep8和谷歌可以认作标准...

    python coding style guide 的快速落地实践 机器和人各有所长,如coding style检查这种可自动化的工作理应交给机器去完成,故发此文帮助你在几分钟内实现coding st ...

  4. python打印自动换行如何解决_解决python DataFrame 打印结果不换行问题

    解决python DataFrame 打印结果不换行问题 如下所示: 加入代码: pd.set_option('display.width', 5000) 补充知识:Python 实现不换行打印字符的 ...

  5. Python基础(三)--序列

    Python基础(三)--序列 1 序列相关的概念 1.1 什么是序列 序列是一种可迭代对象,可以存储多个数据,并提供数据的访问. 序列中的数据称为元素,Python内置的序列类型有:列表(list) ...

  6. 计算机等级考试二级Python讲座(三)

    计算机等级考试二级 Python 讲座 第三章 基本数据类型 by 梦雅微信:762459510 考纲考点 数字类型:整数类型.浮点数类型和复数类型 数字类型的运算:数值运算操作符.数值运算函数 字符 ...

  7. 了解Python编程——Python学习(三)

    三.Python中的数据类型 1.Python3语言中内置的基本数据类型 2.C语言和Python语言的变量类型对比 3.Number数值类型 分别是:整数(int).浮点数(float).布尔值(b ...

  8. python怎么输入三引号_python三引号如何输入

    python三引号如何输入,注释,字符,引号,单引号,双引号 python三引号如何输入 易采站长站,站长之家为您整理了python三引号如何输入的相关内容. Python中的三引号,3个单引号及3个 ...

  9. python coding style guide 的快速落地实践

    python coding style guide 的快速落地实践 机器和人各有所长,如coding style检查这种可自动化的工作理应交给机器去完成,故发此文帮助你在几分钟内实现coding st ...

  10. python coding style why_python coding style guide 的快速落地实践——业内python 编码风格就pep8和谷歌可以认作标准...

    python coding style guide 的快速落地实践 机器和人各有所长,如coding style检查这种可自动化的工作理应交给机器去完成,故发此文帮助你在几分钟内实现coding st ...

最新文章

  1. 23 版本以上的v4包_Ant Design Pro V2升级到V4 小结
  2. LabVIEW2018安装教程
  3. ASP.NET Core 介绍
  4. poi动态创建文档_POI创建的文档具有不同条件的灵活样式
  5. 从微软一站式代码库中学到的--跨域之间的session共享
  6. dropbox_在5分钟内学习Dropbox API
  7. Android tv开发px,【Android】TV端项目开发挖坑总结
  8. POJ 1191 棋盘分割(区间DP)题解
  9. Android Java编写布局
  10. EditPlus v2.20 Build 205
  11. python平台无关性_Java是如何实现平台无关性的
  12. 【Java】正则表达式分组匹配
  13. linux kvm usb设备,KVM虚拟机上关于宿主机的USB设备使用问题探究
  14. 记录一个看着比较顺眼的blockquote的css装饰
  15. EMV(二)交易流程
  16. Caché 实操《Caché 算法与数据结构-数组原理》学习笔记
  17. ubuntu kylin 16.04系统的基本安装
  18. vue 用A链接下载文件 视频
  19. 布隆过滤器简单实现添加和判断功能
  20. process 嵌入exe的启动位置_干货【U盘启动盘源代码】

热门文章

  1. 动态规划-打败怪兽的概率(java)
  2. java个十百千万位余数_java中求一个整数个十百千位的方法
  3. 亿级流量网站架构核心技术。(PDF版)
  4. SWT/JFace 同一个Label组件中显示不同的字体和字体颜色
  5. 三菱服务器显示d01,三菱井道故障显示代码是什么?
  6. Codeforces Round #853 (Div. 2) C. Serval and Toxel‘s Arrays【统计次数,算贡献】
  7. java中aes明文长度_AES密文与明文长度的关系
  8. 2017美国数学建模MCM B题(离散型)翻译 收费后合并 (Merge After Toll)
  9. 【科研】论文初稿小技巧
  10. esp32项目结构及分区表、flash大小的修改