Pandas数据分析基础—pandas自带函数map()/apply()/applymap()


前言

在进行数据处理时,经常会对一个DataFrame展开逐行、逐列、逐元素的操作,对应这些操作,常常使用Pandas中的map、apply和applymap三个函数进行处理。本文主要讲这三个函数在series、dataframe数据结构下应用情况及三个函数的区别。


模拟的样本数据

boolean=[True,False]
channel=["T","N"]
data=pd.DataFrame({
    "A":np.random.randint(150,190,10),
    "B":np.random.randint(40,90,10),
    "C":[boolean[x] for x in np.random.randint(0,2,10)],
    "D":[channel[x] for x in np.random.randint(0,2,10)]
}
)
data

在这里插入图片描述

一、Series数据处理

1、map()方法

  • 使用字典进行映射

举例:
要求:将D列中”N“换为0,”T“为1。

data['D']=data['D'].map({'N':0,'T':1})
data

在这里插入图片描述

  • 使用函数

举例:
要求:将D列中”N“换为0,”T“为1。

def func(values):
	if values=='N':
		return 0
	else:
		return 1

data['D']=data['D'].map(func)
data

在这里插入图片描述

不管是利用字典还是函数进行映射,map方法都是把对应的数据逐个当作参数传入到字典或函数中,得到映射后的值。

2、apply()方法

  • 使用函数做映射

举例:
要求:将D列中”N“换为0,”T“为1。

def func(values):
	if values=='N':
		return 0
	else:
		return 1

data['D']=data['D'].apply(func)
data

在这里插入图片描述

  • apply可以输入额外的参数
    可以给apply调用函数添加多个参数,在apply里加上args=,将其他参数组成一个元组代入函数中。注意:只有一个额外参数时需要写成这种形式:(‘额外参数1’,),加一个’,',代表是一个元组。

举例:
要求:将A列中所有数值减去100。

def func(values,x):
	return values+x

data['A']=data['A'].apply(func,args=(-100,))
data

在这里插入图片描述

  • 不可以用字典来做映射

举例:
要求:将D列中”N“换为0,”T“为1。

data['D']=data['D'].apply({'N':0,'T':1})
data

在这里插入图片描述

3、applymap()方法

  • series没有applymap函数。

总结

  • Series的map可以直接输入字典做关系映射,apply不行。
  • Series的apply可以输入函数之外的额外参数,map不行。
  • Series的apply和map都可以输入函数做数据处理。
  • Series没有applymap函数。
  • Series的apply是不能直接输入字典做关系映射,不是不能输入字典。

二、DataFrame数据处理

1、map()方法

  • DataFrame中没有map()方法

2、apply()方法

  • 对比Series的apply,DataFrame的apply多了一个核心参数axis:
    当axis=1时,对每行执行指定函数。
    当axis=0时,对每列执行指定函数。

举例1
要求:对比A、B两列,求每行最大值

import numpy as np 
data[['A','B']].apply(np.max,axis=1)

在这里插入图片描述
举例2
要求:求A、B两列的最大值

import numpy as np 
data[['A','B']].apply(np.max,axis=0)

在这里插入图片描述

3、applymap()方法

  • applymap会对DataFrame中每个单元格执行指定函数的操作

举例:
要求:将dataframe中所有的值保留两位小数显示,使用applymap可以很快达到你想要的目的

import pandas as pd
data = pd.DataFrame(
    {
        "A":np.random.randn(5),
        "B":np.random.randn(5),
        "C":np.random.randn(5),
        "D":np.random.randn(5),
        "E":np.random.randn(5),
    }
)
data 

data .applymap(lambda x:"%.2f" % x)

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

总结

  • DataFrame没有map函数。
  • DataFrame的apply是对行(可以单行也可以多行)或列(可以单列也可以多列)执行指定函数的操作,有axis参数,当axis=1,对每行执行指定函数,当axIs=0时,对每列执行指定函数。
  • DataFrame中applymap会对每个单元格执行指定函数的操作。

三、map、apply、applymap三个函数区别

  • map:应用在单独一个Series的每个元素中,只针对单列。

  • apply:应用在DataFrame的行或列中,也可以应用到单独一个Series的每个元素中,针对多列,也可以单列。

  • applymap:应用在DataFrame的每个元素中。针对DataFrame全部元素。apply想要直接对每个元素进行操作,得单独取出serires才可以实现,不能直接在整个DataFrame上执行。


参考文章:

https://zhuanlan.zhihu.com/p/100064394
https://zhuanlan.zhihu.com/p/133722455
https://zhuanlan.zhihu.com/p/584036056

  • 6
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
pandas中的applymapapplymap都是用于对DataFrame或Series中的数据进行函数应用的方法,它们的具体使用方式和作用略有不同。 1. apply方法 apply方法是用于对DataFrame或Series的行或列执行函数操作的方法。可以通过传递axis参数来指定是对行还是列进行操作,默认是对列进行操作。apply方法接受一个函数作为参数,并将该函数应用到DataFrame或Series的每一个元素上,然后将结果组合成一个新的DataFrame或Series。 示例: ``` import pandas as pd data = {'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]} df = pd.DataFrame(data) def add_one(x): return x + 1 # 对每一列执行add_one函数 df.apply(add_one) # 对每一行执行add_one函数 df.apply(add_one, axis=1) ``` 2. map方法 map方法是用于对Series中的每一个元素执行函数操作的方法。它接受一个函数作为参数,并将该函数应用到Series的每一个元素上,然后将结果组合成一个新的Series。 示例: ``` import pandas as pd data = {'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]} df = pd.DataFrame(data) def add_one(x): return x + 1 # 对Series A 中的每一个元素执行add_one函数 df['A'].map(add_one) ``` 3. applymap方法 applymap方法是用于对DataFrame中的每一个元素执行函数操作的方法。它接受一个函数作为参数,并将该函数应用到DataFrame的每一个元素上,然后将结果组合成一个新的DataFrame。 示例: ``` import pandas as pd data = {'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]} df = pd.DataFrame(data) def add_one(x): return x + 1 # 对DataFrame中的每一个元素执行add_one函数 df.applymap(add_one) ``` 总结: apply方法适用于对DataFrame或Series的行或列执行函数操作;map方法适用于对Series中的每一个元素执行函数操作;applymap方法适用于对DataFrame中的每一个元素执行函数操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值