数据处理三板斧——apply、map、applymap

一、.apply()

如果是对series,则对series里的各值分别施加一个函数。第一个参数是函数对象,然后用关键字参数指定 args = (a,b)等,如

a = [[6,21,1.11],[ 8, 22, 1.22], [12, 23,1.33]]        # 新建一个dataframe
a = pd.DataFrame(a,columns=['age','weight','height'])
print(a)
   age  weight  height
0    6      21    1.11
1    8      22    1.22
2   12      23    1.33

定义一个判断并修改年龄的函数

def new_age (age, max,min):     # 如果年龄大于10就修改为10
    if age> max: age = 10       # 如果年龄小于5就修改为5
    if age < min: age = 5
    return age

再对dataframe的age列调用,注意调用的是series。第一个参数是函数对象,之后使用关键字agrs和kargs传参,否则会报错

b = a.iloc[:,0].apply(new_age, args = (9,7))       # 对serise使用apply
print (b)
0     5
1     8
2    10

也可以使用lamda(),类似.map(),就这个例子来说多个if判断肯定比lamda方便多了

如果是对dataframe,会挨个传入各行/各列,再施加一个函数,如计算BMI,为体重/(身高的平方),定义如下函数

   age  weight  height
0    6      21    1.11
1    8      22    1.22
2   12      23    1.33

def bmi(se):
    a = se['weight'] / se['height']**2
    return a
a['bmi'] = a.apply(bmi ,axis=1)        # 新增bmi列
print(a)

apply的第一个参数仍是函数对象,axis=1指定按行传入各series,列名不变,默认axis=0按列

结果是

   age  weight  height        bmi
0    6      21    1.11  17.044071
1    8      22    1.22  14.780973
2   12      23    1.33  13.002431

二、.map() 

 这个.map()不是python自带的map(func(), iterable),用于迭代对象的。而是用于映射(譬如把性别这一列的男替换成1,女替换为0)或函数变换,映射既可以用字典也可以用定义函数,变换则跟apply一样施加一个函数,比如lamda

a = [['小明','男',18],['小王','女',20]]
a = pd.DataFrame(a,columns=['名字','性别','年龄'])
print(a)

   名字 性别  年龄
0  小明  男  18
1  小王  女  20

 传回一个series,直接直接传字典,也可以传入定义的函数但只能有一个参数,或者lamda

print(a['性别'].map({'男':1,'女':0}))  # 传入字典,可以直接写在map参数里

0    1
1    0
def new_sex(x):                         # 传入函数
    return 1 if x == '男' else 0
print(a['性别'].map(new_sex))

三、.applymap()

结合了apply和map的特性,apply无法直接对dataframe的每个数据,map只能对series,而applymap可以直接对df的每个元素。例如对每个元素加一,直接用lamda

   age  weight  height
0    6      21    1.11
1    8      22    1.22
2   12      23    1.33


print(a)
print(a.applymap(lambda x:x-1))

   age  weight  height
0    5      20    0.11
1    7      21    0.22
2   11      22    0.33

总结:

apply功能最强大,即可对series(此时挨个处理元素)也可对dataframe(此时挨个处理series),参数可以传多个;map主要用于映射;而applymap可以直接对dataframe的每个元素修改。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值