Python模块之Pandas 格式化数据

一、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

1、所有列格式化

所有列格式化为2位小数,并转为百分数
df.style.format("{:.2%}")

2、指定列格式化

使用字典和lambda来格式特定列

用字典对指定列进行格式化
df.style.format({'B': "{:0
用lambda对指定列进行格式化
df.style.format({"B": lambda x: "±{:.2f}".format(abs(x))})
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})

3、用map()、applymap()结合自定义函数

(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的切片

4、隐藏索引 hide_index 或列 hide_columns

隐藏索引
df.style.hide_index()

#隐藏列
df.style.hide_columns(['C','D'])

5、当样式不取决于值时,使用 set_properties

df.style.set_properties(**{'background-color': 'black',
                           'color': 'lawngreen',
                           'border-color': 'white'})

参考链接:

需要重新赋值给df,写入excel时会保留格式。所以,这一方法更实用些。

  • 对指定列格式化用map()

  • 对所有元素格式化用applymap()

1、保留2位小数

#对'A'列进行设置
df['A']=df_decimal['A'].map(lambda x:('%.2f')%x)
#所有数字保留两位小数
df=df_decimal.applymap(lambda x:('%.2f')%x)

2、设置百分数

#对'A'列进行设置
df['A']=df_decimal['A'].map(lambda x:format(x,'.2%'))
#所有数字设置百分号(%)
df=df_decimal.applymap(lambda x:format(x,'.2%'))

#注意需要重新赋值给df

3、设置千位分隔符

#对'A'列进行设置(千位分隔符)
df['A']=df_int['A'].map(lambda x:format(x,','))
#对所有数据设置千位分隔符
df=df_int.applymap(lambda x: format(x,','))

Original: https://blog.csdn.net/m0_64336020/article/details/121883674
Author: python-小卒
Title: Python模块之Pandas 格式化数据

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/752685/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球