python中的apply(),applymap(),map() 的用法和区别

本文介绍如何使用Python中的Pandas库对DataFrame和Series进行数据处理,包括应用函数的方法,如apply(), applymap() 和 map(),并展示了它们在实际场景中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Python中如果想要对数据使用函数,可以借助apply(),applymap(),map() 来应用函数,括号里面可以是直接函数式,或者自定义函数(def)或者匿名函数(lambad)

import pandas as pd
import numpy as np
from pandas import DataFrame
from pandas import Series
df1= DataFrame({
                "sales1":[-1,2,3],
                "sales2":[3,-5,7],
               })
df1

1、当我们要对数据框(DataFrame)的数据进行按行或按列操作时用apply()

df1.apply(lambda x :x.max()-x.min(),axis=1)
#axis=1,表示按行对数据进行操作
#从下面的结果可以看出,我们使用了apply函数之后,系统自动按行找最大值和最小值计算,每一行输出一个值
0    4
1    7
2    4
dtype: int64
df1.apply(lambda x :x.max()-x.min(),axis=0)
#默认参数axis=0,表示按列对数据进行操作
#从下面的结果可以看出,我们使用了apply函数之后,系统自动按列找最大值和最小值计算,每一列输出一个值
sales1     4
sales2    12
dtype: int64

2、当我们要对数据框(DataFrame)的每一个数据进行操作时用applymap(),返回结果是DataFrame格式

df1.applymap(lambda x : 1 if x>0 else 0)
#从下面的结果可以看出,我们使用了applymap函数之后,
#系统自动对每一个数据进行判断,判断之后输出结果

3、当我们要对Series的每一个数据进行操作时用map()

df1.sales1.map(lambda x : 1 if x>0 else 0)
#df1.sales1就是一个Series
0    0
1    1
2    1
Name: sales1, dtype: int64

4、总结:要对数据进行应用函数时,先看数据结构是DataFrame还是Series,Seriesj结构直接用map(),DataFrame结构的话再看是要按行还是按列进行操作来选择对应的函数即可~

025-06-27 17:52:39 [main] INFO o.a.s.s.c.e.codegen.CodeGenerator - Code generated in 190.8767 ms 2025-06-27 17:52:40 [main] INFO o.a.s.s.c.e.codegen.CodeGenerator - Code generated in 7.2843 ms 2025-06-27 17:52:40 [main] ERROR c.s.service.SparkStreamingPipeline - 数据清洗流程异常:wrong number of arguments java.lang.IllegalArgumentException: wrong number of arguments at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:101) at org.codehaus.groovy.runtime.metaclass.TransformMetaMethod.invoke(TransformMetaMethod.java:54) at groovy.lang.MetaClassImpl$3.invoke(MetaClassImpl.java:1257) at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:323) at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1217) at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1041) at org.codehaus.groovy.runtime.callsite.PojoMetaClassSite.call(PojoMetaClassSite.java:44) at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:115) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:127) at com.suwei.service.SparkStreamingPipeline.runFromRabbitMQ(SparkStreamingPipeline.groovy:72) at com.suwei.service.SparkStreamingPipeline$runFromRabbitMQ.call(Unknown Source) at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:115) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:135) at com.suwei.bigdata.BigDataApplicationTests.testFullCleaningPipeline(BigDataApplicationTests.groovy:
最新发布
06-28
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值