Pandas三大利器-map、apply、applymap
我们在利用pandas进行数据处理的时候,经常会对数据框中的单行、多行(列也适用)甚至是整个数据进行某种相同方式的处理,比如将数据中的sex字段中男替换成1,女替换成0。自己最近处理数据的时候就遇到不少类似的需求。
在这种情况下用for循环是一种很简单、直接的方式,但是运行效率很低。本文中介绍了pandas
中的三大利器:map、apply、applymap来解决上述的需求。
模拟数据
通过一个模拟的数据来说明3个函数的使用,在这个例子中学会了如何生成各种模拟数据。数据如下:
1 | import pandas as pd |
map
demo
map() 会根据提供的函数对指定序列做映射。
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
1 | map(function, iterable) |
实际数据
将gender中男变成1,女变成0
1 | # 方式1:通过字典映射实现 |
apply
apply
方法的作用原理和map
方法类似,区别在于apply
能够传入功能更为复杂的函数,可以说apply是map的高级版。
pandas 的 apply()
函数可以作用于 Series
或者整个 DataFrame
,功能也是自动遍历整个 Series
或者 DataFrame
, 对每一个元素运行指定的函数。
在DataFrame
对象的大多数方法中,都会有axis
这个参数,它控制了你指定的操作是沿着0轴还是1轴进行。axis=0
代表操作对列columns
进行,axis=1
代表操作对行row
进行
demo
- 上面的数据中将age字段的值都减去3,即加上-3
1 | def apply_age(x,bias): |
- 计算BMI指数
1 | # 实现计算BMI指数:体重/身高的平方(kg/m^2) |
DF型数据的apply操作总结:
- 当
axis=0
时,对每列columns
执行指定函数;当axis=1
时,对每行row
执行指定函数。 - 无论
axis=0
还是axis=1
,其传入指定函数的默认形式均为Series
,可以通过设置raw=True
传入numpy数组
。 - 对每个Series执行结果后,会将结果整合在一起返回(若想有返回值,定义函数时需要
return
相应的值)
apply实现需求
通过apply方法实现上面的性别转换需求。apply方法中传进来的第一个参数一定是函数
applymap
DF数据加1
applymap函数用于对DF型数据中的每个元素执行相同的函数操作,比如下面的加1: