zoukankan      html  css  js  c++  java
  • Pandas常用操作

    初始化测试数据

    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,key为需要增加的列,value为回调函数或者 Series,即 df.assign(k1=Series1, k2=Series2) 的形式。
    所以在上例中,计算需要的 label,则需要写成:
    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

    不能直接写成
    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().



    尊重写作权利,转载请注明出处 ^_^
  • 相关阅读:
    leecode 240. 搜索二维矩阵 II
    leecode 103. 二叉树的锯齿形层序遍历
    leecode 362. 敲击计数器
    leecode 152. 乘积最大子数组
    leecode 560. 和为K的子数组
    面试题 08.12. 八皇后
    leecode 450. 删除二叉搜索树中的节点
    leecode 384. 打乱数组
    leecoode 138. 复制带随机指针的链表
    mysql基本指令2
  • 原文地址:https://www.cnblogs.com/convict/p/14855847.html
Copyright © 2011-2022 走看看