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

文章目录

  • 前言
  • 一、Series数据处理
    • 1、map()方法
    • 2、apply()方法
    • 3、applymap()方法
    • 总结
  • 二、DataFrame数据处理
    • 1、map()方法
    • 2、apply()方法
    • 3、applymap()方法
    • 总结
  • 三、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

Pandas数据分析基础—pandas自带函数map()/apply()/applymap()_第1张图片

一、Series数据处理

1、map()方法

  • 使用字典进行映射

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

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

Pandas数据分析基础—pandas自带函数map()/apply()/applymap()_第2张图片

  • 使用函数

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

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

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

Pandas数据分析基础—pandas自带函数map()/apply()/applymap()_第3张图片

不管是利用字典还是函数进行映射,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

Pandas数据分析基础—pandas自带函数map()/apply()/applymap()_第4张图片

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

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

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

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

Pandas数据分析基础—pandas自带函数map()/apply()/applymap()_第5张图片

  • 不可以用字典来做映射

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

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

Pandas数据分析基础—pandas自带函数map()/apply()/applymap()_第6张图片

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)

Pandas数据分析基础—pandas自带函数map()/apply()/applymap()_第7张图片
举例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)

Pandas数据分析基础—pandas自带函数map()/apply()/applymap()_第8张图片
Pandas数据分析基础—pandas自带函数map()/apply()/applymap()_第9张图片

总结

  • 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

你可能感兴趣的:(python数据分析基础知识,python,pandas)