100天精通Python(数据分析篇)——第63天:Pandas使用自定义函数案例
创始人
2024-04-04 15:56:02
0

在这里插入图片描述

文章目录

  • 每篇前言
  • 一、Pandas自定义函数
    • 1. pipe()
    • 2. apply()
    • 3. map()
    • 4. applymap()
    • 5. agg()
  • 二、总结

每篇前言

  • 🏆🏆作者介绍:Python领域优质创作者、华为云享专家、阿里云专家博主、2021年CSDN博客新星Top6

  • 🔥🔥本文已收录于Python全栈系列专栏:《100天精通Python从入门到就业》
  • 📝​📝​此专栏文章是专门针对Python零基础小白所准备的一套完整教学,从0到100的不断进阶深入的学习,各知识点环环相扣
  • 🎉🎉订阅专栏后续可以阅读Python从入门到就业100篇文章还可私聊进千人Python全栈交流群(手把手教学,问题解答); 进群可领取80GPython全栈教程视频 + 300本计算机书籍:基础、Web、爬虫、数据分析、可视化、机器学习、深度学习、人工智能、算法、面试题等。
  • 🚀🚀加入我一起学习进步,一个人可以走的很快,一群人才能走的更远!

在这里插入图片描述
在这里插入图片描述

一、Pandas自定义函数

自定义函数是指:有时候需要对 pandas 里的值进行一些特殊操作,但是没有内置函数,或者把其他库中的函数应用到 Pandas 对象中,这时候可以自己写的一个函数

1. pipe()

通过给 pipe() 函数传递一个自定义函数和适当数量的参数值,从而操作 DataFrme 中的所有元素

语法格式

DataFrame.pipe(func: Callable[..., T] | tuple[Callable[..., T], str],*args,**kwargs,)

参数说明

  • func:自己编写要应用于Series/DataFrame的函数,*args, **kwargs被传递到“func”中
  • args:迭代的参数,可选,可以是元组类型,也可以是列表类型或者其他。
  • kwargs:映射的参数,可选,是一个包含关键字的字典。

1. 首先写一个自定义函数(DataFrame中所有数值乘以多少倍):

def ride(num, multiple):return num * multiple

2. 应用自定义函数:

import numpy as np
import pandas as pd# 自定义函数
def ride(num, multiple):return num * multipledf = pd.DataFrame(np.ones((3, 3)), columns=['a', 'b', 'c'])
print("应用前:")
print(df)print("应用后:")
print(df.pipe(ride, 10))  # 所有数值乘以10倍

运行结果:
在这里插入图片描述

2. apply()

apply()可以对DataFrame按行和列(默认按列)进行函数处理,也支持Series。如果是Series,将逐个传入具体值。使用lambda时,变量是调用对象低一维的值。

语法格式:

DataFrame.apply(func: AggFuncType,axis: Axis = 0,raw: bool = False,result_type=None,args=(),**kwargs,)

参数说明

  • func:自己编写要应用于Series/DataFrame的函数,*args, **kwargs被传递到“func”中

  • Axis :应用功能的轴,0 将函数应用于每列,1将函数应用于每一行,默认为0。

  • raw:bool,默认为False。确定行或列是否作为Series或ndarray对象传递:

    • False:将每行或每列作为序列传递给作用

    • True:传递的函数将接收ndarray对象

    • 相反,如果您只是应用NumPy缩减函数,这将实现更好的性能。

  • result_type:‘expand’,‘reduce’,‘broadcast’,None},默认为None。这些仅在“轴=1”(列)时起作用:

    • expand:类似列表的结果将变成列。

    • reduce:如果可能,返回一个序列,而不是展开列表式结果。这与“展开”相反。

    • broadcast:结果将广播到原始形状在DataFrame中,原始索引和列将是保留。

    • 默认行为(None)取决于应用的函数:类似列表的结果将作为序列返回其中之一。但是,如果apply函数返回Series展开为列。

  • args:迭代的参数,可选,可以是元组类型,也可以是列表类型或者其他。

  • kwargs:映射的参数,可选,是一个包含关键字的字典。

可以与lambda结合使用:

import numpy as np
import pandas as pddata = {'A': pd.Series(1, index=list(range(4)), dtype='float32'),'B': pd.Series(2, index=list(range(4)), dtype='float32'),'C': pd.Series(3, index=list(range(4)), dtype='float32')}
df = pd.DataFrame(data)print("应用前:")
print(df)print("对列进行求和:")
print(df.apply(lambda x: x.sum(), axis=0))
print("对行进行求和:")
print(df.apply(lambda x: x.sum(), axis=1))

运行结果:
在这里插入图片描述

3. map()

map()是Series对象的一个函数,DataFrame中没有map(),map()的功能是将一个自定义函数作用于Series对象的每个元素。

语法格式

Series.map(arg, na_action=None) -> Series

参数说明:

  • arg:自己编写要应用于Series的函数。映射子类或系列映射对应关系
  • na_action:{None,“ignore”},默认为无,如果“ignore”,则传播NaN值,而不将它们传递给映射对应关系。

使用map()函数来将 A 这一列的数据改为保留三位小数显示:

import numpy as np
import pandas as pddata = {'A': pd.Series(1, index=list(range(4)), dtype='float32'),'B': pd.Series(2, index=list(range(4)), dtype='float32'),'C': pd.Series(3, index=list(range(4)), dtype='float32')}
df = pd.DataFrame(data)print("应用前:")
print(df)print("应用后:")
print(df['A'].map(lambda x : "%.3f"%x))

运行结果:
在这里插入图片描述

4. applymap()

DataFrame 数据表结构的 applymap() 和 Series 系列结构的 map() 类似,applymap将自定义函数作用于DataFrame的所有元素

语法格式

DataFrame.applymap(func: PythonFuncType, na_action: str | None = None, **kwargs) -> DataFrame

参数说明

  • func:Python函数,从单个值返回单个值。

  • na_action:{None,“ignore”},默认为无,如果“ignore”,则传播NaN值,而不将它们传递给func。

  • kwargs:映射的参数,可选,是一个包含关键字的字典。

import numpy as np
import pandas as pddata = {'A': pd.Series(1, index=list(range(4)), dtype='float32'),'B': pd.Series(2, index=list(range(4)), dtype='float32'),'C': pd.Series(3, index=list(range(4)), dtype='float32')}
df = pd.DataFrame(data)print("应用前:")
print(df)print("应用后:")
print(df.applymap(lambda x: x * 10))

运行结果:
在这里插入图片描述

5. agg()

聚合函数agg()一般用于使用指定轴上的一项或多项操作进行汇总,可以传入一个函数或函数的字符,还可以用列表的形式传入多个函数。agg()还支持传入函数的位置参数和关键字参数,支持每个列分别用不同的方法聚合,支持指定轴的方向。agg()的用法整体上与apply()极为相似。

语法格式:

DataFrame.agg(func=None, axis: Axis = 0, *args, **kwargs)

参数说明

  • func:用于聚合数据的函数,如max()、mean()、count()等,函数必须满足传入一个DataFrame能正常使用,或传递到DataFrame.apply()中能正常使用。
  • Axis :应用功能的轴,0 将函数应用于每列,1将函数应用于每一行,默认为0。
  • args:迭代的参数,可选,可以是元组类型,也可以是列表类型或者其他。
  • kwargs:映射的参数,可选,是一个包含关键字的字典。
import numpy as np
import pandas as pddata = [[1, 2, 3, 4],[11, 22, 33, 44],[111, 222, 333, 444],[1111, 2222, 3333, 4444]]df = pd.DataFrame(data)print("应用前:")
print(df)print("在列上聚合这些函数:")
print(df.agg(['max', 'min', 'mean']))
print("在行上聚合这些函数:")
print(df.agg(['max', 'min', 'mean'],axis=1))

运行结果:
在这里插入图片描述

二、总结

  • 1、通过给 pipe() 函数传递一个自定义函数和适当数量的参数值,从而操作 DataFrme 中的所有元素

  • 2、apply()方法使用与Series对象、DataFrame对象、Groupby对象,处理的是行或列数据(本质上处理的是单个Series),用函数类对象来构建映射关系对Series对象进行转换;

  • 3、map()方法适用于Series对象,可以通过字典或函数类对象来构建映射关系对Series对象进行转换;

  • 4、applymap()方法用来处理DataFrame对象的单个元素值,也是使用函数类对象映射转换

  • 5、agg()函数为aggregate的缩写,总数、合计、聚合的意思,是一个功能非常强大的函数,在Pandas中可以利用agg()对Series、DataFrame以及groupby()后的结果进行聚合操作。

相关内容

热门资讯

银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...