pandas修改特定的值
map、apply映射
map和apply都是用于映射的,map一般用于Series对象,而apply用于DataFrame对象。简答的讲,就是如果要对某一列数据进行映射,map和apply都可以;但是如果要对多列数据同时进行映射或者一个映射关系中涉及多个列作为自变量,就只能用apply而不能用map。所以很多观点认为apply比map更好用。
实际上map也有独特之处,例如,要针对某一列进行字典映射时,map函数可以直接接受字典,而apply就不支持字典类型参数。上代码对比:
"""用map实现字典映射"""
df = pd.DataFrame({"姓名":["大宝","二狗","三炮","四眼","五福"],"工龄":[3,5,2,1,None],"奖金":[200,300,100,100,None]})
change = {"大宝":"张三",
"二狗":"李四",
"三炮":"王五",
"四眼":"赵六",
"五福":"宋七"}
df["姓名"] = df["姓名"].map(change)
def fun(x):
return x + 1
df["工龄"] = df["工龄"].map(fun)
"""apply可以映射多个参数的函数"""
def func(x,num):
return x + x * num
def foo(x,y):
if x >= 3:
return x * y
else:
return x * y / 2
df["次月奖金"] = df["奖金"].apply(func,args=(0.1,),axis=1)
df["年终奖"] = df.apply(lambda df: foo(x=df["工龄"],y=df["奖金"]),axis=1)
df[["奖金","次月奖金","年终奖"]].apply(sum,axis=0)
根据某些特定条件修改列的值
df.loc[df["工龄"]<2,"年终奖"] = 500
用指定值填充空值
df.fillna({"工龄":1,"奖金":df["工龄"]*100},inplace=True)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)