目录
一、style格式化数据
1、所有列格式化
2、指定列格式化
(1) 使用字典对指定列格式化
(2) 使用lambda对指定列格式化
(3) 使用 na_rep设置空值的显示
(4) 内置样式函数
3、用map()、applymap()结合自定义函数
4、隐藏索引hide_index或列hide_columns
5、当样式不取决于值时,使用set_properties
二、用map()、applymap()结合format()格式化
1、保留2位小数
2、设置百分数
3、设置千位分隔符
需安装Jinja2:cmd>pip install Jinja2。
在pandas style的官方文档中,有这样一句note,意思大致是这样的:style属性本身会返回object对象,这个对象内部有一个_repr_heml_方法,可以转为html语言,可以调用.render()方法,查看其html语言及css样式。
css样式在程序里是可以被浏览器识别的,而jupyter notebook本身是运行在网页上的开发工具,所以这些样式是可以被jupyter notebook识别的。
生成模拟数据
import pandas as pd
import numpy as np
np.random.seed(24)
df = pd.DataFrame({'A': np.linspace(1, 10, 10)})
df = pd.concat([df, pd.DataFrame(np.random.randn(10, 4), columns=list('BCDE'))],
axis=1)
df.iloc[3, 3] = np.nan
df.iloc[0, 2] = np.nan
# 所有列格式化为2位小数,并转为百分数
df.style.format("{:.2%}")
使用字典和lambda来格式特定列
# 用字典对指定列进行格式化
df.style.format({'B': "{:0<4.0f}", 'D': '{:+.2f}'})
# 用自定义字典对指定列进行格式化
format_dict = {'sum':'${0:,.0f}', '日期': '{:%Y-%m}', 'pct_of_total': '{:.2%}'}
(monthly_sales.style
.format(format_dict)
.highlight_max(color='#cd4f39')
.highlight_min(color='lightgreen'))
# 用lambda对指定列进行格式化
df.style.format({"B": lambda x: "±{:.2f}".format(abs(x))})
na_rep
设置空值的显示df.style.format("{:.2%}", na_rep="空值")
# 高亮最大值
df.style.highlight_max().format(None, na_rep="-")
# 高亮空值
df.style.highlight_null(null_color='red')
# 对B列取绝对值
df.style.format({'B': abs})
(1) 负数涂成红色,将正数涂成黑色
# 负数高亮显示
def color_negative_red(val):
"""
Takes a scalar and returns a string with
the css property `'color: red'` for negative
strings, black otherwise.
"""
color = 'red' if val < 0 else 'black'
return 'color: %s' % color
df.style.applymap(color_negative_red)
# 最大值高亮显示
def highlight_max(s):
is_max = s == s.max()
return ['background-color: yellow' if v else '' for v in is_max]
df.style.applymap(color_negative_red).apply(highlight_max)
#map()方法根据提供的函数,对序列的值映射
#apply()方法根据提供的函数,按axis=0或1的方式对序列的值映射
#applymap()方法根据提供的函数,对所有元素的值映射
(2) 结合seaborn使用热力图
import seaborn as sns
cm=sns.light_palette('green',as_cmap=True)
s=df.style.background_gradient(cmap=cm)
(3) 条形图样式
df.style.bar(subset['A','B'],color='#d65f5f')
subset
参数控制作用的行列。
subset
传入的参数类似DataFrame的切片
hide_index
或列hide_columns
# 隐藏索引
df.style.hide_index()
#隐藏列
df.style.hide_columns(['C','D'])
set_properties
df.style.set_properties(**{'background-color': 'black',
'color': 'lawngreen',
'border-color': 'white'})
参考链接:
pandas style格式化数据
Pandas Style 为数据表格美颜
提高数据的颜值!一起看看Pandas中的那些Style
需要重新赋值给df,写入excel时会保留格式。所以,这一方法更实用些。
- 对指定列格式化用map()
- 对所有元素格式化用applymap()
#对'A'列进行设置
df['A']=df_decimal['A'].map(lambda x:('%.2f')%x)
#所有数字保留两位小数
df=df_decimal.applymap(lambda x:('%.2f')%x)
#对'A'列进行设置
df['A']=df_decimal['A'].map(lambda x:format(x,'.2%'))
#所有数字设置百分号(%)
df=df_decimal.applymap(lambda x:format(x,'.2%'))
#注意需要重新赋值给df
#对'A'列进行设置(千位分隔符)
df['A']=df_int['A'].map(lambda x:format(x,','))
#对所有数据设置千位分隔符
df=df_int.applymap(lambda x: format(x,','))
参考文章:Pandas 实战系列:数字格式设置