• 利用Python进行数据分析_Pandas_基本功能


    申明:本系列文章是自己在学习《利用Python进行数据分析》这本书的过程中,为了方便后期自己巩固知识而整理。

    第一 重新索引

    Series的reindex方法

    In [15]: obj = Series([3,2,5,7,6,9,0,1,4,8],index=['a','b','c','d','e','f','g',
        ...: 'h','i','j'])
    
    In [16]: obj1 = obj.reindex(['a','b','c','d','e','f','g','h','i','j','k'])
    
    In [17]: obj1
    Out[17]:
    a    3.0
    b    2.0
    c    5.0
    d    7.0
    e    6.0
    f    9.0
    g    0.0
    h    1.0
    i    4.0
    j    8.0
    k    NaN
    dtype: float64

    新索引值当前值缺失,则需要插值

    前向值填充method=’ffill’,最后索引j对应的值来填充

    In [19]: obj1 = obj.reindex(['a','b','c','d','e','f','g','h','i','j','k'],metho
        ...: d='ffill')
    
    In [20]: obj1
    Out[20]:
    a    3
    b    2
    c    5
    d    7
    e    6
    f    9
    g    0
    h    1
    i    4
    j    8
    k    8
    dtype: int64

    前向值搬运method=’pad’,最后索引j对应的值来填充

    In [23]: obj1 = obj.reindex(['a','b','c','d','e','f','g','h','i','j','k'],metho
        ...: d='pad')
    
    In [24]: obj1
    Out[24]:
    a    3
    b    2
    c    5
    d    7
    e    6
    f    9
    g    0
    h    1
    i    4
    j    8
    k    8
    dtype: int64

    后向值填充method=’bfill’,最后索引j的后面的索引对应的值来填充,j的后一个位置为NaN的空行

    In [62]: obj2 = obj.reindex(['a','b','c','d','e','f','g','k','h','i','j'],metho
         ...: d='bfill')

    In [63]: obj2
    Out[63]:
    a    3.0
    b    2.0
    c    5.0
    d    7.0
    e    6.0
    f    9.0
    g    0.0
    k    NaN
    h    1.0
    i    4.0
    j    8.0
    dtype: float64

    后向值搬运method=’backfill’,最后索引j的后面的索引对应的值来填充,j的后一个位置为NaN的空行

    In [64]: obj2 = obj.reindex(['a','b','c','d','e','f','g','k','h','i','j'],metho
        ...: d='backfill')
    
    In [65]: obj2
    Out[65]:
    a    3.0
    b    2.0
    c    5.0
    d    7.0
    e    6.0
    f    9.0
    g    0.0
    k    NaN
    h    1.0
    i    4.0
    j    8.0
    dtype: float64

    DataFrame的reindex方法

    修改(行)索引、列,或两个都修改。

    引入一个序列,则重新索引行,如下:

    In [86]: data = {'class':['语文','数学','英语'],'score':[120,130,140]}
    
    In [87]: frame = DataFrame(data)
    
    In [88]: frame
    Out[88]:
      class  score
    0    语文    120
    1    数学    130
    2    英语    140
    
    In [89]: frame2 = frame.reindex([0,1,2,3])
    
    In [90]: frame2
    Out[90]:
      class  score
    0    语文  120.0
    1    数学  130.0
    2    英语  140.0
    3   NaN    NaN

    行、列 都修改

    In [94]: frame3 = frame.reindex(index=[11,22,33],columns = ['a','b','c','d'])
    
    In [95]: frame3
    Out[95]:
         a   b   c   d
    11 NaN NaN NaN NaN
    22 NaN NaN NaN NaN
    33 NaN NaN NaN NaN

    reindex的参数如下:

    image

    第二 删除指定轴(索引)上的项

    Series

    In [112]: obj = Series([1,2,3,4],index=['a','b','c','d'])
    
    In [113]: obj
    Out[113]:
    a    1
    b    2
    c    3
    d    4
    dtype: int64
    
    In [114]: obj1 = obj.drop('c')
    
    In [115]: obj1
    Out[115]:
    a    1
    b    2
    d    4
    dtype: int64

    DataFrame

    删除单索引行

    In [109]: frame
    Out[109]:
      class  score
    0    语文    120
    1    数学    130
    2    英语    140
    
    In [110]: obj = frame.drop(0)
    
    In [111]: obj
    Out[111]:
      class  score
    1    数学    130
    2    英语    140

    删除多索引行

    In [119]: frame
    Out[119]:
      class  score
    0    语文    120
    1    数学    130
    2    英语    140
    
    In [120]: frame.drop([1,2])
    Out[120]:
      class  score
    0    语文    120

    删除多索引行(带axis)

    In [130]: frame
    Out[130]:
      class  score
    0    语文    120
    1    数学    130
    2    英语    140
    
    In [131]: frame.drop([1,2],axis=0)
    Out[131]:
      class  score
    0    语文    120

    删除列(columns)(带axis)

    In [135]: frame
    Out[135]:
      class  score
    0    语文    120
    1    数学    130
    2    英语    140
    
    In [136]: frame.drop(['class'],axis=1)
    Out[136]:
       score
    0    120
    1    130
    2    140

    其中,axis=0,表示行,axis=1,表示列

    第三 索引、选取与过滤

    Series

    In [1]: from pandas import Series,DataFrame
    
    In [2]: obj = Series([1,2,3,4],index=['a','b','c','d'])
    
    In [3]: obj
    Out[3]:
    a    1
    b    2
    c    3
    d    4
    dtype: int64
    
    In [4]: obj[1]
    Out[4]: 2
    
    In [5]: obj['c']
    Out[5]: 3
    
    In [6]: obj[1:2]
    Out[6]:
    b    2
    dtype: int64
    
    In [7]: obj[2:4]
    Out[7]:
    c    3
    d    4
    dtype: int64

    DataFrame

    In [13]: from pandas import DataFrame,Series
    
    In [14]: data = DataFrame([[1,2,3],[4,5,6],[7,8,9]],index=['a','b','c'],columns
        ...: =['aa','bb','cc'])
    
    In [15]: data
    Out[15]:
       aa  bb  cc
    a   1   2   3
    b   4   5   6
    c   7   8   9

    索引方式一

    In [16]: data['bb']
    Out[16]:
    a    2
    b    5
    c    8
    Name: bb, dtype: int64

    索引方式二

    In [19]: data[:2]
    Out[19]:
       aa  bb  cc
    a   1   2   3
    b   4   5   6

    索引方式三

    In [20]: data[data<4]
    Out[20]:
        aa   bb   cc
    a  1.0  2.0  3.0
    b  NaN  NaN  NaN
    c  NaN  NaN  NaN
    
    In [21]: data[data<4]=0
    
    In [22]: data
    Out[22]:
       aa  bb  cc
    a   0   0   0
    b   4   5   6
    c   7   8   9

    索引方式四

    In [24]: data.ix[:2,['aa','cc']]
    Out[24]:
       aa  cc
    a   0   0
    b   4   6

    第四 算术运算与数据对齐

    Series

    In [36]: a1
    Out[36]:
    a    1
    b    2
    c    3
    d    4
    e    5
    dtype: int64
    
    In [37]: a2
    Out[37]:
    a    2
    b    3
    c    4
    f    5
    g    6
    dtype: int64

    a1+a2

    In [38]: a1+a2
    Out[38]:
    a    3.0
    b    5.0
    c    7.0
    d    NaN
    e    NaN
    f    NaN
    g    NaN
    dtype: float64

    DataFrame

    In [47]: import numpy as np
    
    In [48]: b1 = DataFrame(np.arange(12.).reshape((3,4)),columns=list('abcd'))
    
    In [49]: b1
    Out[49]:
         a    b     c     d
    0  0.0  1.0   2.0   3.0
    1  4.0  5.0   6.0   7.0
    2  8.0  9.0  10.0  11.0
    
    In [50]: b2 = DataFrame(np.arange(20.).reshape((4,5)),columns=list('abcde'))
    
    In [51]: b2
    Out[51]:
          a     b     c     d     e
    0   0.0   1.0   2.0   3.0   4.0
    1   5.0   6.0   7.0   8.0   9.0
    2  10.0  11.0  12.0  13.0  14.0
    3  15.0  16.0  17.0  18.0  19.0
    
    In [52]: b1+b2
    Out[52]:
          a     b     c     d   e
    0   0.0   2.0   4.0   6.0 NaN
    1   9.0  11.0  13.0  15.0 NaN
    2  18.0  20.0  22.0  24.0 NaN
    3   NaN   NaN   NaN   NaN NaN

    对NaN进行指定值填充

    In [53]: b1.sub(b2,fill_value=0)
    Out[53]:
          a     b     c     d     e
    0   0.0   0.0   0.0   0.0  -4.0
    1  -1.0  -1.0  -1.0  -1.0  -9.0
    2  -2.0  -2.0  -2.0  -2.0 -14.0
    3 -15.0 -16.0 -17.0 -18.0 -19.0

    DataFrame与Series运算

    In [101]: b1
    Out[101]:
         a    b     c     d
    
    0 0.0 1.0 2.0 3.0
    1  4.0  5.0   6.0   7.0
    2  8.0  9.0  10.0  11.0
    
    In [102]: b1.ix[0]
    Out[102]:
    
    a 0.0 b 1.0 c 2.0 d 3.0
    
    Name: 0, dtype: float64
    
    In [103]: b1-b1.ix[0]
    Out[103]:
         a    b    c    d
    
    0 0.0 0.0 0.0 0.0
    1  4.0  4.0  4.0  4.0
    2  8.0  8.0  8.0  8.0

    第五 函数应用于映射

    In [111]: b1
    Out[111]:
         a    b     c     d
    0  0.0  1.0   2.0   3.0
    1  4.0  5.0   6.0   7.0
    2  8.0  9.0  10.0  11.0
    
    In [112]: f = lambda x:x.max()-x.min()
    
    In [113]: b1.apply(f)
    Out[113]:
    a    8.0
    b    8.0
    c    8.0
    d    8.0
    dtype: float64

    找出DataFrame中每列的最大值和最小值

    In [1]: import numpy as np
    
    In [2]: from pandas import DataFrame,Series
    
    In [3]: import pandas as pd
    
    In [4]: b1 = DataFrame(np.arange(12.).reshape((3,4)),columns=list('abcd'))
    
    In [5]: b1
    Out[5]:
         a    b     c     d
    0  0.0  1.0   2.0   3.0
    1  4.0  5.0   6.0   7.0
    2  8.0  9.0  10.0  11.0
    
    In [6]: def f(x):
       ...:     return Series([x.min(),x.max()],index=['min','max'])
       ...:
    
    In [7]: b1.apply(f)
    Out[7]:
           a    b     c     d
    min  0.0  1.0   2.0   3.0
    max  8.0  9.0  10.0  11.0

    第六 排序和排名

    排序

    Series

    obj.sort_index()

    In [19]: obj = Series([4,np.nan,7,np.nan,-3,2])
    
    In [20]: obj
    Out[20]:
    0    4.0
    1    NaN
    2    7.0
    3    NaN
    4   -3.0
    5    2.0
    dtype: float64
    
    In [21]: obj.sort_index()
    Out[21]:
    0    4.0
    1    NaN
    2    7.0
    3    NaN
    4   -3.0
    5    2.0
    dtype: float64
    
    In [22]: obj.sort_values()
    Out[22]:
    4   -3.0
    5    2.0
    0    4.0
    2    7.0
    1    NaN
    3    NaN
    dtype: float64

    DataFrame

    默认升序

    data.sort_index()

    data.sort_index(axis=1)

    data.sort_index(axis=1,ascending=False)

    排名

    Series

    排名会有一个排名值,从1开始。

    rank()是平均排名,也就是会出现同排名值的情况。

    但是可以通过如下method选项去破坏平级关系:

    image

    In [38]: obj = Series([3,4,2,1,5,7,9,0])
    
    In [39]: obj
    Out[39]:
    0    3
    1    4
    2    2
    3    1
    4    5
    5    7
    6    9
    7    0
    dtype: int64
    
    In [40]: obj.rank()
    Out[40]:
    0    4.0
    1    5.0
    2    3.0
    3    2.0
    4    6.0
    5    7.0
    6    8.0
    7    1.0
    dtype: float64
    
    In [41]: obj.rank(method='first')
    Out[41]:
    0    4.0
    1    5.0
    2    3.0
    3    2.0
    4    6.0
    5    7.0
    6    8.0
    7    1.0
    dtype: float64
    
    In [42]: obj.rank(ascending=False,method='min')
    Out[42]:
    0    5.0
    1    4.0
    2    6.0
    3    7.0
    4    3.0
    5    2.0
    6    1.0
    7    8.0
    dtype: float64

    DataFrame

    In [44]: data = DataFrame({'b':[4,7,-3,2],'a':[0,1,0,1],'c':[-2,5,6,7]})
    
    In [45]: data
    Out[45]:
       a  b  c
    0  0  4 -2
    1  1  7  5
    2  0 -3  6
    3  1  2  7
    
    In [46]: data.rank(axis=1)
    Out[46]:
         a    b    c
    0  
    2.0 3.0 1.0
    1  1.0  3.0  2.0
    2  2.0  1.0  3.0
    3  1.0  2.0  3.0

    axis表示行,axis=1表示第一行进行排名,0、4、-2,默认从小到大升序,应该是-2、0、4,所以0的排名值应该是2.0;4的排名值是3.0;-2的排名值是1.0

    第七 带有重复值的轴索引

    通过is_unique属性可以判断索引是否唯一。

  • 相关阅读:
    C# 如何telnet IP的某端口/ping 是否通
    centos7.9设置系统时间,并同步到硬件
    基于阿里云 DNS API 实现的 DDNS 工具
    GridControl 通用类2
    使用JSON.stringify时需注意的坑
    java中BigDecimal和0比较
    c# WindowsCommunityToolkit--- Shade Animation
    WPF 取消在触屏上点击按下不松开会出现矩形背景的效果
    c# 反射私有类和私有方法
    c# 汉字转拼音
  • 原文地址:https://www.cnblogs.com/zhouwp/p/8436341.html
Copyright © 2020-2023  润新知