准备工作
准备dataframe名为df
如图
一、对Series操作
1.1 map
原理:map将数据逐个当作参数传入字典或者函数中,返回映射之后的值;最后映射结果组成新的Series
使用lambda函数:
# 1. 令所有人年龄加上88
df['age'].map(lambda x: x+88)
# 2. 性别栏,把f换成女,m换成男
df['gender'].map({'f':'女','m':'男'})
使用自定义函数,这里map只接受一个参数,即传入的x
例如:
# 3. 函数实现2中的功能
def gender_map(x):
if x == 'f':
return '女'
elif x == 'm':
return '男'
df['gender'].map(gender_map)
1.2 apply
相较于map,apply工作原理类似,区别是能够传入更加复杂的参数,接受多个参数
令所有人的年龄加上一个变量bias:
# 年龄加上bias,bias作为参数传入
def age_apply(x, bias):
return x+bias
df['age'].apply(age_apply, args=(-3,))
这里,用args以元组格式传入参数
再例如,对年龄乘以第一个参数,加上第二个参数(共两个参数):
def age_apply(x, multiple, bias):
return x*multiple+bias
df['age'].apply(age_apply, args=(20, -3)) # 这里第一个参数20对应multiple,第二个参数-3对应bias
二、对DataFrame操作
2.1 apply
对于DataFrame而言,apply中的参数axis=1表示对【行】遍历,axis=0表示对【列】遍历
对于传入apply的行(或列)数据,以Series格式传入指定函数,返回对应的结果
例如,对行操作,性别为m,年龄大于20的,将性别的’f’改为’男’:
def gender_apply(x):
if (x['gender'] == 'm') & (x['age'] > 20):
return '男'
else:
return x['gender']
pass
df.apply(gender_apply, axis=1)
2.2 applymap
对DataFrame中的每个单元格执行指定函数的操作
例如,想对下面的DataFrame所有数值执行保留两位小数的操作
# 构建dataframe
df = pd.DataFrame(data=np.random.randn(5,5),
columns=list('ABCDE'))
# 保留两位小数
df.applymap(lambda x: '%.2f' % x)
原始数据:
保留两位小数:
参考文章