zoukankan      html  css  js  c++  java
  • python模块之numpy,pandas基本用法

    numpy:

    是 Python 的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库
    简单来说:就是支持一维数组和多维数组的创建和操作,并有丰富的函数库。

    直接看例子

    一维数组:

    k=np.array([1,2,3,4])          
    np.ndim(k) #查看维数
    1
    np.shape(k) #显示维度的元素个数
    (4,)
    k.size     #总共多少个数字
    4

    二维数组:

    m=np.array([[1,2,3,4],[0.1,0.2,0.3,0.4]])
    np.shape(m) #
    (2, 4)      #两个维度,一个维度4个数字
    m
    array([[1. , 2. , 3. , 4. ],
           [0.1, 0.2, 0.3, 0.4]])
    m.size
    8

    m[:,0:2] #显示每个维度里面第一和第二个数字

    array([[1. , 2. ],
    [0.1, 0.2]])

    下面看看一个图

     pandas

    是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的,它本身有很多的函数去处理维度层面的数据。

    例如:

    datas=pd.date_range('20191125',periods=6)
    df=pd.DataFrame(np.random.randn(6,4),index=datas,columns=list('abcd')) #通过numpy生成(6,4)的随机数字
    df
                       a         b         c         d
    2019-11-25 -0.050400  1.399334 -0.747377 -0.246388
    2019-11-26 -1.737346 -0.398420 -0.109420  0.532931
    2019-11-27  1.960727 -0.267495 -0.069288  0.071406
    2019-11-28  0.430069 -1.064840 -0.046383  1.358375
    2019-11-29 -0.648332 -1.448899 -1.246229 -0.331214
    2019-11-30 -0.468561 -0.995754  0.750662  0.335533

    查看某列,某行数据,有个缺陷:写了行不能写列,写了列不能写行

    df['a'] #查看a名称列的数据
    2019-11-25   -0.050400
    2019-11-26   -1.737346
    2019-11-27    1.960727
    2019-11-28    0.430069
    2019-11-29   -0.648332
    2019-11-30   -0.468561
    Freq: D, Name: a, dtype: float64
    #查看某行或者某几行数据

    df['2019-11-25':'2019-11-28'] #注意
                     a        b         c       d
    2019-11-25 -0.050400 1.399334 -0.747377 -0.246388
    2019-11-26 -1.737346 -0.398420 -0.109420 0.532931
    2019-11-27 1.960727 -0.267495 -0.069288 0.071406
    2019-11-28 0.430069 -1.064840 -0.046383 1.358375
    df['2019-11-25':'2019-11-25'] #注意
                    a       b       c           d
    2019-11-25 -0.0504 1.399334 -0.747377 -0.246388

    重要方法一:loc  根据数组里面存在的元素查找需要的部分

    下面以df为例子
    datas=pd.date_range('20191125',periods=6)
    df=pd.DataFrame(np.random.randn(6,4),index=datas,columns=list('abcd'))
    df
                       a         b         c         d
    2019-11-25 -0.050400  1.399334 -0.747377 -0.246388
    2019-11-26 -1.737346 -0.398420 -0.109420  0.532931
    2019-11-27  1.960727 -0.267495 -0.069288  0.071406
    2019-11-28  0.430069 -1.064840 -0.046383  1.358375
    2019-11-29 -0.648332 -1.448899 -1.246229 -0.331214
    2019-11-30 -0.468561 -0.995754  0.750662  0.335533

    df.loc['2019-11-25':'2019-11-25','a':'b'] #查看日期2019-11-25的 a,b两列
                   a        b
    2019-11-25 -0.0504 1.399334

    #需要取行中不连续的,要使用index,例如上面的index=datas,相当于把时间放入一个列表里面

    df.loc[datas[0::2],'a':'b'] 
                   a          b
    2019-11-25 -0.050400 1.399334
    2019-11-27 1.960727 -0.267495
    2019-11-29 -0.648332 -1.448899

     重要方法之二:iloc,它的原理将行列转化成列表的索引表示

    df.iloc[0:1,1:2] #就不会出现数组里面的元素了
                       b
    2019-11-25  1.399334
    df.iloc[::2,0:2]
                       a         b
    2019-11-25 -0.050400  1.399334
    2019-11-27  1.960727 -0.267495
    2019-11-29 -0.648332 -1.448899

     pandas重要方法之三:groupby 根据某个列值取排列某个列或者多个列,用来计算

    >>> df1=pd.DataFrame({'Data1':np.random.randint(0,10,5),'Data2':np.random.randint(10,20,5),'key1':list('aabba'),'key2':list('xyyxy')})
    >>> df1
       Data1  Data2 key1 key2
    0      7     15    a    x
    1      3     11    a    y
    2      3     18    b    y
    3      6     15    b    x
    4      9     10    a    y

    根据单列来对单列分组计算
    >>> mm=df1['Data1'].groupby(df1['key1'])
    查看mm的分组情况

    >>> mm.groups #'key1'列排序后就两个字符串 a,b 然后分别根据a,b来对'Data1'列进行分组

    {'a': Int64Index([0, 1, 4], dtype='int64'), 'b': Int64Index([2, 3], dtype='int64')}

    #对mm进行求平均

    >>> mm.mean()
    key1
    a 6.333333
    b 4.500000
    Name: Data1, dtype: float64

    #根据多列对多列分组

    >>> df1.groupby([df1['key1'],df1['key2']]).sum()

                 Data1    Data2
    key1 key2
    a     x       7        15
          y       12       21
    b     x       6        15
          y       3        18

    根据多列对多列分组看下图

  • 相关阅读:
    [转]解密回声消除技术之二(应用篇)
    [转]解密回声消除技术之一(理论篇)
    Linux命令练级初级
    [转]win7+ubuntu 13.04双系统安装方法
    c/c++常用代码--清空目录
    c++程序开发利器
    vc2005 编译ACE-6.2.0
    Facebook Login api
    IIS7.0 下使用Intelligencia.UrlRewriter时Session为空问题
    无后缀名伪静态路径在IIS7.0的网站提示 "404
  • 原文地址:https://www.cnblogs.com/mmyy-blog/p/11935245.html
Copyright © 2011-2022 走看看