Python中map、apply、applymap三函数的使用(用于DataFrame)

因为我主要是将其用于DataFrame数据中,所以我们可以这么认为

  • map(Series)—>对某列进行操作
  • apply(DataFrame)—>对行数据或者列数据进行操作
  • applymap(DataFrame)—>对所有表中元素进行操作

一,map

  • 在python2中map返回的是一个列表,而在python3中返回的是一个迭代器,如果获取转换为 list 就行了
import pandas as pd
import numpy as np

#DataFrame数据合并
temp = {"name":["一","二","三","四","五"],"年龄":[10,5,17,5,17],"num":[5,500,10000,700,8000]}
a = pd.DataFrame(temp)


#   name  年龄    num
# 0    一  10      5
# 1    二   5    500
# 2    三  17  10000
# 3    四   5    700
# 4    五  17   8000

#方法一;
def square(x) :
	return x ** 2
a["年龄"] = list(map(square,a["年龄"]))
# print(a)

#   name   年龄    num
# 0    一  100      5
# 1    二   25    500
# 2    三  289  10000
# 3    四   25    700
# 4    五  289   8000

#方法二:
a["年龄"].map(lambda x: x ** 2)
print(a)

#   name   年龄    num
# 0    一  100      5
# 1    二   25    500
# 2    三  289  10000
# 3    四   25    700
# 4    五  289   8000

二,apply

  • axis = 0 作用在列上,默认
  • axis = 1 作用在行上
import pandas as pd
import numpy as np

#DataFrame数据合并
temp = {"name":["一","二","三","四","五"],"年龄":[10,5,17,5,17],"num":[5,500,10000,700,8000]}
a = pd.DataFrame(temp)


#   name  年龄    num
# 0    一  10      5
# 1    二   5    500
# 2    三  17  10000
# 3    四   5    700
# 4    五  17   8000

###方法一;非匿名函数

#修改某一列
def xiugai(x) :
	return str(x)+"修改"
a["年龄"] = a["年龄"].apply(xiugai )
print(a)

#   name    年龄    num
# 0    一  10修改      5
# 1    二   5修改    500
# 2    三  17修改  10000
# 3    四   5修改    700
# 4    五  17修改   8000

#修改某一行
def xiugai(x) :
	return str(x)+"修改"
a.iloc[0] = a.iloc[0].apply(xiugai )
print(a)

#   name    年龄    num
# 0  一修改  10修改    5修改
# 1    二     5    500
# 2    三    17  10000
# 3    四     5    700
# 4    五    17   8000


###方法二:匿名函数

#修改某一列
a["年龄"] = a["年龄"].apply(lambda x:str(x) + "修改")
print(a)

#   name    年龄    num
# 0    一  10修改      5
# 1    二   5修改    500
# 2    三  17修改  10000
# 3    四   5修改    700
# 4    五  17修改   8000


#修改某一行
a.iloc[0] = a.iloc[0].apply(lambda x:str(x) + "修改")
print(a)

#   name    年龄    num
# 0  一修改  10修改    5修改
# 1    二     5    500
# 2    三    17  10000
# 3    四     5    700
# 4    五    17   8000

###方法三:多参数传入

# 注意这里args只能传入(元组),不能是"ok"或("ok")
def testf(x, str):
	return x,str
a["name"] = a["name"].apply(testf, args=("ok",))
print(a)

#       name  年龄    num
# 0  (一, ok)  10      5
# 1  (二, ok)   5    500
# 2  (三, ok)  17  10000
# 3  (四, ok)   5    700
# 4  (五, ok)  17   8000

三,applymap

import pandas as pd
import numpy as np

#DataFrame数据合并
temp = {"name":["一","二","三","四","五"],"年龄":[10,5,17,5,17],"num":[5,500,10000,700,8000]}
a = pd.DataFrame(temp)


#   name  年龄    num
# 0    一  10      5
# 1    二   5    500
# 2    三  17  10000
# 3    四   5    700
# 4    五  17   8000

###方法一;非匿名函数

def xiugai(x) :
	return str(x)+"修改"
a = a.applymap(xiugai )
print(a)

#   name    年龄      num
# 0  一修改  10修改      5修改
# 1  二修改   5修改    500修改
# 2  三修改  17修改  10000修改
# 3  四修改   5修改    700修改
# 4  五修改  17修改   8000修改



###方法二:匿名函数

a = a.applymap(lambda x:str(x) + "修改")
print(a)

#   name    年龄      num
# 0  一修改  10修改      5修改
# 1  二修改   5修改    500修改
# 2  三修改  17修改  10000修改
# 3  四修改   5修改    700修改
# 4  五修改  17修改   8000修改
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值