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().



    尊重写作权利,转载请注明出处 ^_^
  • 相关阅读:
    不舍
    java 笔记
    Javascript 行为委托
    JavaScript 函数调用的 this词法
    Javascript 闭包
    Javascript 原型链
    理解css的BFC
    多模态检索之CCA算法
    MySQL 基础概念、基础配置、密码破解
    Python的进程和线程
  • 原文地址:https://www.cnblogs.com/convict/p/14855847.html
Copyright © 2011-2022 走看看