• Pandas 与 Numpy 常用方法总结


    Lambda 函数实现

    简单的说,lambda 就是一个函数,但是这个函数没有名字,所以我们介绍一下这个函数的调用形式,参数与返回值的实现。 lambda 的格式如下:

    lambda [arg1 [, agr2,.....argn]] : expression
    lambda x : expression
    

    那么这个函数怎么使用了,它常常不是单独使用,单独的使用的时候可以较为简单,实现的功能过于简单。所以通常被使用的情况是,某个函数的参数是一个函数,那么这个参数就可以使用 lambda来实现。

    >>> foo = [2, 18, 9, 22, 17, 24, 8, 12, 27]
    >>> list(map(lambda x: x * 2 + 10, foo)) 
    # 这里的 map 函数的第一个参数就是函数
    

    Pandas的Apply函数

    apply 函数如下 DataFrame.apply(func, axis=0, broadcast=False, raw=False, reduce=None, args=(), **kwds) 。其核心部分是function 的选择,其次是 axis 表示维度,这个函数可以通过上面说的 lambda函数实现。这个函数的参数就是 DataFrame, 返回的对象既可以是 DataFrame 也可以是 series。

    >>> import pandas as pd
    >>> import numpy as np
    >>> df = pd.DataFrame([[4, 9],] * 3, columns=['A', 'B'])
    >>> df.apply(np.sqrt)
         A    B
    0  2.0  3.0
    1  2.0  3.0
    2  2.0  3.0
    # 返回的是一个 DataFrame
    
    >>> df.apply(np.sum, axis=0)
    A    12
    B    27
    dtype: int64 # 返回的是一个 Series
    >>> df.apply(lambda x: x*2 + 1, axis = 1) # 这种情况下,x 表示的是 df 中所有的参数
       A   B
    0  9  19
    1  9  19
    2  9  19
    >>> df.apply(lambda x: [1, 2,5], axis=1)
    0    [1, 2, 5]
    1    [1, 2, 5]
    2    [1, 2, 5]
    >>> df.apply(lambda x: [1, 2,5], axis=0)
       A  B
    0  1  1
    1  2  2
    2  5  5
    >>> df.apply(lambda x: [1, 2,6,7,8,5], axis=0)
    A    [1, 2, 6, 7, 8, 5]
    B    [1, 2, 6, 7, 8, 5]
    >>> type(df.apply(lambda x: [1, 2,6,7,8,5], axis=0))
    <class 'pandas.core.series.Series'>
    # 这时,将DataFrame变成一个 Series。
    

    python Zip函数

    zip 函数的使用就是 zip([iterable, …]) 。zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象中对应的元素打包成一个个tuple(元组),然后返回由这些tuples组成的list(列表)。

    >>> name = [ "Manjeet", "Nikhil", "Shambhavi", "Astha" ]
    >>> roll_no = [ 4, 1, 3, 2 ]
    >>> marks = [ 40, 50, 60, 70 ]
    >>> mapped = zip(name, roll_no, marks)
    >>> list(mapped)
    [('Manjeet', 4, 40), ('Nikhil', 1, 50), ('Shambhavi', 3, 60), ('Astha', 2, 70)]
    

    Pandas 中的 Map函数

    Map 函数主要是对 DataFrame 的操作,其参数还可以是函数,

    >>> import pandas as pd
    >>> from pandas import Series, DataFrame
    >>> data = DataFrame({'food':['bacon','pulled pork','bacon','Pastrami',
       'corned beef','Bacon','pastrami','honey ham','nova lox'],
         'ounces':[4,3,12,6,7.5,8,3,5,6]})
    >>> data
              food  ounces
    0        bacon     4.0
    1  pulled pork     3.0
    2        bacon    12.0
    3     Pastrami     6.0
    4  corned beef     7.5
    5        Bacon     8.0
    6     pastrami     3.0
    7    honey ham     5.0
    8     nova lox     6.0
    >>> meat_to_animal = {
     'bacon':'pig',
     'pulled pork':'pig',
     'pastrami':'cow',
     'corned beef':'cow',
     'honey ham':'pig',
     'nova lox':'salmon' } 
    
    >>> meat_to_animal
    {'bacon': 'pig', 'pulled pork': 'pig', 'pastrami': 'cow', 'corned beef': 'cow', 'honey ham': 'pig', 'nova lox': 'salmon'}
    >>> data['food'].map(str.lower)
    0          bacon
    1    pulled pork
    2          bacon
    3       pastrami
    4    corned beef
    5          bacon
    6       pastrami
    7      honey ham
    8       nova lox
    Name: food, dtype: object
    >>> data['animal'] = data['food'].map(str.lower).map(meat_to_animal)
    >>> data
              food  ounces  animal
    0        bacon     4.0     pig
    1  pulled pork     3.0     pig
    2        bacon    12.0     pig
    3     Pastrami     6.0     cow
    4  corned beef     7.5     cow
    5        Bacon     8.0     pig
    6     pastrami     3.0     cow
    7    honey ham     5.0     pig
    8     nova lox     6.0  salmon
    >>> data['ounces'] = data['ounces'].map(lambda x: x+ 2) # 这里使用 Map 函数与Apply函数有点类似
    >>> data
              food  ounces  animal
    0        bacon     6.0     pig
    1  pulled pork     5.0     pig
    2        bacon    14.0     pig
    3     Pastrami     8.0     cow
    4  corned beef     9.5     cow
    5        Bacon    10.0     pig
    6     pastrami     5.0     cow
    7    honey ham     7.0     pig
    8     nova lox     8.0  salmon
    

    Numpy 中stack(),hstack(),vstack()函数

    stack() 函数

    函数原型为:stack(arrays, axis=0),arrays可以传数组和列表。axis的含义我下面会讲解,我们先来看个例子。

    >>> import numpy as np
    >>> a=[[[1,2,3,4],[11,21,31,41]],
       [[5,6,7,8],[51,61,71,81]],
       [[9,10,11,12],[91,101,111,121]]]
    >>> a
    [[[1, 2, 3, 4], [11, 21, 31, 41]], [[5, 6, 7, 8], [51, 61, 71, 81]], [[9, 10, 11, 12], [91, 101, 111, 121]]]
    # 可以看成 a 有三层,我们把从外到里分别看成 axis = 0, axis = 1, axis = 2的三层,首先要确定这个 list a,有三个元素,每个元素都# 是一个 list_1,每个 lsit_1 有两个 list_2 元素, 
    >>> np.stack(a, axis = 0)
    array([[[  1,   2,   3,   4],
            [ 11,  21,  31,  41]],
    
           [[  5,   6,   7,   8],
            [ 51,  61,  71,  81]],
    
           [[  9,  10,  11,  12],
            [ 91, 101, 111, 121]]])
    >>> d = np.stack(a, axis = 0)
    >>> len(d)
    3
    >>> d.shape			# 在shape中分别表示从外到里的维度
    (3, 2, 4)
    # 得到的是一个 array 的类型,堆叠的是 axis = 0的那一层,相当于没变,只是数据格式改变
    >>> np.stack(a, axis = 1)
    array([[[  1,   2,   3,   4],
            [  5,   6,   7,   8],
            [  9,  10,  11,  12]],
    
           [[ 11,  21,  31,  41],
            [ 51,  61,  71,  81],
            [ 91, 101, 111, 121]]])
    >>> c = np.stack(a, axis = 1)
    >>> c.shape
    (2, 3, 4)
    # 这里获取 array 的每个元素的方式
    >>> np.stack(a, axis = 2)
    array([[[  1,   5,   9],
            [  2,   6,  10],
            [  3,   7,  11],
            [  4,   8,  12]],
    
           [[ 11,  51,  91],
            [ 21,  61, 101],
            [ 31,  71, 111],
            [ 41,  81, 121]]])
    >>> b = np.stack(a, axis = 2)
    >>> b.shape
    (2, 4, 3)
    

    我们可以这样理解,stack 过程中堆叠了那一层的元素,将这些元素作为新的 Array 的最里层,axis != 0 的时候永远都是将第一层的元素堆叠成新的最里层元素。

    hstack() 函数

    对于上面的例子,我们做个转换就很好理解 hstack() 函数了

    >>> d = np.stack(a, axis = -1)
    >>> d
    array([[[  1,   5,   9],
            [  2,   6,  10],
            [  3,   7,  11],
            [  4,   8,  12]],
    
           [[ 11,  51,  91],
            [ 21,  61, 101],
            [ 31,  71, 111],
            [ 41,  81, 121]]])
    >>> d = np.hstack(d)
    >>> d
    array([[  1,   5,   9,  11,  51,  91],
           [  2,   6,  10,  21,  61, 101],
           [  3,   7,  11,  31,  71, 111],
           [  4,   8,  12,  41,  81, 121]])
    >>> d = np.hstack(d)
    >>> d
    array([  1,   5,   9,  11,  51,  91,   2,   6,  10,  21,  61, 101,   3,
             7,  11,  31,  71, 111,   4,   8,  12,  41,  81, 121])
    >>> a = [[[[1, 2, 3, 4], [11, 21, 31, 41]], [[5, 6, 7, 8], [51, 61, 71, 81]], [[9, 10, 11, 12], [91, 101, 111, 121]]]]
    >>> a
    [[[[1, 2, 3, 4], [11, 21, 31, 41]], [[5, 6, 7, 8], [51, 61, 71, 81]], [[9, 10, 11, 12], [91, 101, 111, 121]]]]
     hstack() 还可以用于两个array 的横向合并
    >>> a=[[1],[2],[3]]
    >>> b=[[1],[2],[3]]
    >>> np.hstack((a,b))
    array([[1, 1],
           [2, 2],
           [3, 3]])
     vstack() 函数用于列的合并,也就是纵向
    >>> np.vstack((a,b))
    array([[1],
           [2],
           [3],
           [1],
           [2],
           [3]])
    

    Pandas分组运算(groupby)函数

    groupby 函数就如字面上的意思,就是分组的意思,常用的方法第一个是分组, mean() 方法, 而groupby 的方法也常常用在观察数据类型中,在实际中分组也会使用

    import pandas as pd
    >>> df = pd.DataFrame({'A': ['a', 'b', 'a', 'c', 'a', 'c', 'b', 'c'], 'B': [2, 8, 1, 4, 3, 2, 5, 9],'C': [102, 98, 107, 104, 115, 87, 92, 123]})
    >>> df
       A  B    C
    0  a  2  102
    1  b  8   98
    2  a  1  107
    3  c  4  104
    4  a  3  115
    5  c  2   87
    6  b  5   92
    7  c  9  123
    >>> df.groupby('A').mean()
         B           C
    A                 
    a  2.0  108.000000
    b  6.5   95.000000
    c  5.0  104.666667
    >>> df.groupby(['A','B']).mean()
           C
    A B     
    a 1  107
      2  102
      3  115
    b 5   92
      8   98
    c 2   87
      4  104
      9  123
    

    聚合方法size()和count()

    size跟count的区别: size计数时包含 NaN 值,而count不包含 NaN 值, 我们可以理解 groupby函数是用来分组,那么分组之后的函数是可以选择的,可以是 mean() ,查看,或者是 count() 计数,下面这个例子:

    >>> df = pd.DataFrame({"Name":["Alice", "Bob", "Mallory", "Mallory", "Bob" , "Mallory"],"City":["Seattle", "Seattle", "Portland", "Seattle", "Seattle", "Portland"],"Val":[4,3,3,np.nan,np.nan,4]})
    >>> df
           City     Name  Val
    0   Seattle    Alice  4.0
    1   Seattle      Bob  3.0
    2  Portland  Mallory  3.0
    3   Seattle  Mallory  NaN
    4   Seattle      Bob  NaN
    5  Portland  Mallory  4.0
    >>> df.groupby(["Name", "City"], as_index=False)['Val'].count()
          Name      City  Val
    0    Alice   Seattle    1
    1      Bob   Seattle    1
    2  Mallory  Portland    2
    3  Mallory   Seattle    0
    >>> df.groupby(["Name"], as_index=False)['City'].count()
          Name  City
    0    Alice     1
    1      Bob     2
    2  Mallory     3
    # 选择的那一组表示次数, 比如上面的 City,而Size 函数就是包含 NaN 的个数
    
  • 相关阅读:
    iOS js交互
    崩溃!UIAlertController 引起的崩溃
    跳转到AppStore下载app
    installshield basic msi 更新时覆盖不了上一个版本文件解决方案1
    用ILMerge.exe合并dll
    获取某几个分类下的前N条数据 mssql语句
    计算网络文件的大小
    英语 2018-12-04 2法国燃料涨价抗议活动
    英语2018-12-04
    从一个故事说起,谈谈企业应用架构的演变史
  • 原文地址:https://www.cnblogs.com/wevolf/p/10991789.html
Copyright © 2020-2023  润新知