因为我主要是将其用于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修改