首页 > 其他 > 详细

Pandas常用操作 - 新增数据列

时间:2021-06-06 21:10:27      阅读:16      评论:0      收藏:0      [点我收藏+]

初始化测试数据

df = pd.DataFrame({‘stu_name‘: [‘Nancy‘, ‘Tony‘, ‘Tim‘, ‘Jack‘, ‘Lucy‘], ‘stu_age‘: [17, 16, 16, 21, 19]})
  stu_name  stu_age
0    Nancy       17
1     Tony       16
2      Tim       16
3     Jack       21
4     Lucy       19

1. 直接增加一列

df[‘new_column‘] = ‘-‘
  stu_name  stu_age new_column
0    Nancy       17          -
1     Tony       16          -
2      Tim       16          -
3     Jack       21          -
4     Lucy       19          -

2. apply方法

def cal_label(age):
    if age > 18:
        return ‘成年‘
    else:
        return ‘未成年‘

df[‘label‘] = df[‘stu_age‘].apply(cal_label)
  stu_name  stu_age label
0    Nancy       17   未成年
1     Tony       16   未成年
2      Tim       16   未成年
3     Jack       21    成年
4     Lucy       19    成年

apply 方法中也可以运用 lambda 表达式,使之更加简洁

df[‘label‘] = df[‘stu_age‘].apply(lambda age: ‘成年‘ if age > 18 else ‘未成年‘)
  stu_name  stu_age label
0    Nancy       17   未成年
1     Tony       16   未成年
2      Tim       16   未成年
3     Jack       21    成年
4     Lucy       19    成年

3. loc方法

df.loc[:, ‘label‘] = df[‘stu_age‘].apply(lambda age: ‘成年‘ if age > 18 else ‘未成年‘)
  stu_name  stu_age label
0    Nancy       17   未成年
1     Tony       16   未成年
2      Tim       16   未成年
3     Jack       21    成年
4     Lucy       19    成年

4. assign方法

new_df = df.assign(label=df[‘stu_age‘].apply(lambda x: ‘成年‘ if x > 18 else ‘未成年‘))
  stu_name  stu_age label
0    Nancy       17   未成年
1     Tony       16   未成年
2      Tim       16   未成年
3     Jack       21    成年
4     Lucy       19    成年

assign 方法中,传递的是 **kwargs,值为回调函数或者 Series,即 df.assign(k1=[xxx], k2=[xxx]) 的形式。
所以在上例中,计算 label 不能直接写成:
不能直接写成
new_df = df.assign(label=lambda x: ‘成年‘ if x[‘stu_age‘] > 18 else ‘未成年‘)
此时会抛异常:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

而是需要写成:
new_df = df.assign(label=df[‘stu_age‘].apply(lambda x: ‘成年‘ if x > 18 else ‘未成年‘))
因为df[‘stu_age‘].apply(lambda x: ‘成年‘ if x > 18 else ‘未成年‘)返回的是Series



Pandas常用操作 - 新增数据列

原文:https://www.cnblogs.com/convict/p/14855847.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!