zoukankan      html  css  js  c++  java
  • DataFrame基本操作 <二> 加,减,求和,lambda,索引排序(row,cols,非内容)

    首先来一个别致的列表创建,我有印象但是从来没用过,突然发现很好用也很优雅

    a=list('qwe13qaew')
    print(a)

    运行结果

    ['q', 'w', 'e', '1', '3', 'q', 'a', 'e', 'w']

    实际应用也很有效果,生成两个实例用于练习

    df3 = pd.DataFrame(np.arange(12).reshape((3, 4)),
                        index=['Qingdao', 'Jinan', 'Yantai'],
                        columns=list('abcd'))
    df4 = pd.DataFrame(np.arange(20).reshape((4, 5)),
                        index=['Qingdao', 'Jinan', 'Yantai', 'Linyi'],
                        columns=list('abcde'))   #这种用法很别致啊直接
    print(df3)
    
    print(df4)

    运行结果

             a  b   c   d
    Qingdao  0  1   2   3
    Jinan    4  5   6   7
    Yantai   8  9  10  11
    
              a   b   c   d   e
    Qingdao   0   1   2   3   4
    Jinan     5   6   7   8   9
    Yantai   10  11  12  13  14
    Linyi    15  16  17  18  19

    加法运算

    print(df3 + df4 )# 注意行列数不同的两个 DataFrame 相加行列的对齐和值填充。

    运行结果

             a  b   c   d
    Qingdao  0  1   2   3
    Jinan    4  5   6   7
    Yantai   8  9  10  11
              a   b   c   d   e
    Qingdao   0   1   2   3   4
    Jinan     5   6   7   8   9
    Yantai   10  11  12  13  14
    Linyi    15  16  17  18  19
    #########################################
                a     b     c     d   e
    Jinan     9.0  11.0  13.0  15.0 NaN
    Linyi     NaN   NaN   NaN   NaN NaN
    Qingdao   0.0   2.0   4.0   6.0 NaN
    Yantai   18.0  20.0  22.0  24.0 NaN

    相当牛逼,index跟‘name’相同的直接加,不存在的用缺省值定住。

    填充后的加法运算

    print(df3.add(df4, fill_value=0)) # 注意无效值用 0 填充后的加法运算
    
    print(df3.add(df4, fill_value=100))

    运行结果

                a     b     c     d     e
    Jinan     9.0  11.0  13.0  15.0   9.0
    Linyi    15.0  16.0  17.0  18.0  19.0
    Qingdao   0.0   2.0   4.0   6.0   4.0
    Yantai   18.0  20.0  22.0  24.0  14.0
                 a      b      c      d      e
    Jinan      9.0   11.0   13.0   15.0  109.0
    Linyi    115.0  116.0  117.0  118.0  119.0
    Qingdao    0.0    2.0    4.0    6.0  104.0
    Yantai    18.0   20.0   22.0   24.0  114.0

    减法运算

    s3 = df3.iloc[0]
    print(s3)
    print(df3 - s3 ) # 减法缺省是按列对齐去减,并广播至每一行。

    运行结果

    a    0
    b    1
    c    2
    d    3
    Name: Qingdao, dtype: int32
             a  b  c  d
    Qingdao  0  0  0  0
    Jinan    4  4  4  4
    Yantai   8  8  8  8

    每一行都减去了0,1,2,3

    对比一下

    s4=[4,5,6,7]
    print(df3 - s4) # 减法缺省是按列对齐去减,并广播至每一行。

    运算结果

             a  b  c  d
    Qingdao -4 -4 -4 -4
    Jinan    0  0  0  0
    Yantai   4  4  4  4

     

     下边这个也得慢慢理解

    s3 = df3['b']
    通过指定轴,按行对齐去减,并广播至每一列。
    s3 = df3['b']
    df3.sub(s3, axis=0) # 通过指定轴,按行对齐去减,并广播至每一列。

    运行结果

             a  b   c   d
    Qingdao  0  1   2   3
    Jinan    4  5   6   7
    Yantai   8  9  10  11
    Qingdao    1
    Jinan      5
    Yantai     9
    Name: b, dtype: int32
             a  b  c  d
    Qingdao -1  0  1  2   #一行都减去1
    Jinan   -1  0  1  2   #这一行都减去5
    Yantai  -1  0  1  2   #这一行都减去9

    求和

    print(df3.sum()  )     # 按行对每一列求和
    print(df3.sum(axis=1)) # 按列对每一行求和
    
    #这里就要用到对axis的理解,axis为0是垂直方向,axis为1,就是水平方向,这里不能把0,1理解成行,列,应该理解成垂直与水平

    运行结果

             a  b   c   d
    Qingdao  0  1   2   3
    Jinan    4  5   6   7
    Yantai   8  9  10  11
    #上边是dfs
    
    a    12
    b    15
    c    18
    d    21
    dtype: int64
    Qingdao     6
    Jinan      22
    Yantai     38
    dtype: int64

    lambda表达式处理语句

    垂直方向的最大值-最小值

    a=df3.apply(lambda x: x.max() - x.min()) # 按行对每一列自定义处理
    print(a)
    
    #这里的行其实就是垂直方向,axis=0的意思
    #lambda表达式的意思是每一列(垂直方向就是列)的最大值减去最小值

    运行结果

             a  b   c   d
    Qingdao  0  1   2   3
    Jinan    4  5   6   7
    Yantai   8  9  10  11
    a    8     #8-0
    b    8     #9-1
    c    8     #10-2
    d    8     #11-3
    dtype: int64

    水平方向的最大值减去最小值

    a=df3.apply((lambda x: x.max() - x.min()), axis=1) # 按列对每一行自定义处理
    print(a)

    运行结果

             a  b   c   d
    Qingdao  0  1   2   3
    Jinan    4  5   6   7
    Yantai   8  9  10  11
    Qingdao    3
    Jinan      3
    Yantai     3
    dtype: int64
    对每一个单元应用一个处理
    a=df3.applymap(lambda x: '%.2f' % x) # 对每一个单元应用一个处理
    print(a)
    
    #转化成显示2位小数的浮点类型。这个我不会写,但是先记住用法,以后回来查

    运行结果

             a  b   c   d
    Qingdao  0  1   2   3
    Jinan    4  5   6   7
    Yantai   8  9  10  11
                a     b      c      d
    Qingdao  0.00  1.00   2.00   3.00
    Jinan    4.00  5.00   6.00   7.00
    Yantai   8.00  9.00  10.00  11.00
    索引排序
    按行索引排序 (垂直方向,index)
    a=df3.sort_index() # 按行索引排序
    print(a)
    
    #df.sort_index()就是按照垂直方向排序,A-Z的顺序排,j-q-y的顺序

    运行结果

             a  b   c   d
    Qingdao  0  1   2   3
    Jinan    4  5   6   7
    Yantai   8  9  10  11
             a  b   c   d
    Jinan    4  5   6   7
    Qingdao  0  1   2   3
    Yantai   8  9  10  11
    按列索引倒序排序(水平倒叙排序)
    a=df3.sort_index(axis=1, ascending=False) # 按列索引倒序排序
    print(a)
    
    #这个ascending我得记一下,算了,我遍布下去了,反正记住就行了,ascending=False可以显示出来结果,不加的话,还显示原来的dfs
    
    #可以理解成ps一层一层的,df3的优先级是最高的,这里ascending=false 把df3的优先级给降下去了。先这么理解吧,不对的话以后再改

    运行结果

             a  b   c   d
    Qingdao  0  1   2   3
    Jinan    4  5   6   7
    Yantai   8  9  10  11
              d   c  b  a
    Qingdao   3   2  1  0
    Jinan     7   6  5  4
    Yantai   11  10  9  8

    这些先到这里

     
     
     
     
  • 相关阅读:
    西服定制_男装定制_礼服定制【乐裁】专业首选的全国西服定制商城
    简介 | 北京大学校友创业联合会
    脱颖而出_百度百科
    时装剧
    高龄“潮男”优衣库老板柳井正_榜样_奢华主义_YOKA时尚网
    [女装纸样] 《无私奉献》:看数据知道人的体型--看身高体重知道人体数据---个人绝技不断更新
    瑞邦洋服·私人定制 » 瑞邦头等舱
    爱上MVC~AuthorizeAttribute验证不通过如何停止当前上下文
    Js~(function(){})匿名自执行方法的作用
    Js~动态判断PC和手机浏览器
  • 原文地址:https://www.cnblogs.com/PYlog/p/9142759.html
Copyright © 2011-2022 走看看