美文网首页
Series第七讲 计算/描述统计(上)

Series第七讲 计算/描述统计(上)

作者: butters001 | 来源:发表于2020-09-22 18:24 被阅读0次

    Series第七讲 计算/描述统计(上)

    本节课将讲解Pandas-Series的计算/描述统计,由于接口过多,将分为上下两讲分别进行说明介绍。

    计算/描述统计(上)

    • Series.abs()
    • Series.all()
    • Series.any()
    • Series.autocorr()
    • Series.between()
    • Series.clip()
    • Series.corr()
    • Series.count()
    • Series.cov()
    • Series.cummax()
    • Series.cummin()
    • Series.cumprod()
    • Series.cumsum()
    • Series.describe()
    • Series.diff()
    • Series.factorize()
    • Series.kurt()
    • Series.mad()
    • Series.max()
    • Series.min()
    • Series.mean()
    • Series.median()

    详细介绍

    首先导入所需依赖包

    In [1]: import numpy as np                                                               
    In [2]: import pandas as pd
    

    1. Series.abs()

    Series.abs()
    

    对每个value求绝对值,注意⚠️:该方法仅适用于值全为数字元素的Series或DataFrame。

    In [7]: pd.Series([1, 2, 3, -4]).abs()                                                                                                  
    Out[7]: 
    0    1
    1    2
    2    3
    3    4
    dtype: int64
    
    In [8]: df = pd.DataFrame({ 
       ...:     'a': [4, 5, 6, 7], 
       ...:     'b': [10, 20, 30, 40], 
       ...:     'c': [100, 50, -30, -50] 
       ...: })                                                                                                                              
    
    In [9]: df.abs()                                                                                                                        
    Out[9]: 
       a   b    c
    0  4  10  100
    1  5  20   50
    2  6  30   30
    3  7  40   50
    

    2. Series.all()

    Series.all(axis=0, bool_only=None, skipna=True, level=None, **kwargs)
    

    元素全为True返回True,否则返回False。(DataFrame沿轴计算)。

    常用参数介绍:
    • axis:{0 or ‘index’, 1 or ‘columns’, None}, default 0 【作用轴,针对DataFrame】
      • 0/‘index’:返回索引是列标签的Series
      • 1/‘columns’:返回索引是行标签的Series
      • None:作用于所有的轴,返回一个标量
    • skipna:bool, default True 【跳过NaN值】
    In [11]: pd.Series([True, False]).all()                                                                                                 
    Out[11]: False
    
    In [12]: pd.Series([True, None]).all()                                                                                                  
    Out[12]: True
    
    
    In [19]: df = pd.DataFrame({'col1': [True, True], 'col2': [True, False]})                                                               
    In [20]: df.all()                                                                                                                       
    Out[20]: 
    col1     True
    col2    False
    dtype: bool
    
    In [21]: df.all(axis=1)                                                                                                                 
    Out[21]: 
    0     True
    1    False
    dtype: bool
    
    In [22]: df.all(axis=None)                                                                                                              
    Out[22]: False
    

    3. Series.any()

    Series.any(axis=0, bool_only=None, skipna=True, level=None, **kwargs)
    

    至少有一个元素为True就返回True,否则返回False。参数同all()方法。

    In [28]: pd.Series([True, False]).any()                                                                                                 
    Out[28]: True
    
    In [29]: pd.Series([False, False]).any()                                                                                                
    Out[29]: False
    

    4. Series.autocorr()

    Series.autocorr(lag=1)
    

    求Series的自相关

    常用参数介绍:
    • lag:int, default 1 【执行自相关之前要应用的滞后次数】
    In [32]: c_s = pd.Series([0.25, 0.5, 0.2, -0.05])                                                                                       
    In [33]: c_s.autocorr()                                                                                                                 
    Out[33]: 0.1035526330902407
    
    # 实现原理其实就是如下,下面两个方法后面都会介绍到
    In [35]: c_s.corr(c_s.shift(1))                                                                                                         
    Out[35]: 0.1035526330902407
    

    5. Series.between()

    Series.between(left, right, inclusive=True)
    

    表示每个元素是否在左右之间(包括左和右)的Series。等效于 (left <= ser) & (ser <= right)

    注意⚠️:只能数字与数字、str与str比较。

    常用参数介绍:
    • inclusive:bool, default True 【是否包含边界值】
    In [42]: c_s.between(0.24, 0.50)                                                                                                        
    Out[42]: 
    0     True
    1     True
    2    False
    3    False
    dtype: bool
    
    In [43]: (0.24 <= c_s) & (c_s <= 0.50)                                                                                                  
    Out[43]: 
    0     True
    1     True
    2    False
    3    False
    dtype: bool
    

    6. Series.clip()

    Series.clip(lower=None, upper=None, axis=None, inplace=False, *args, **kwargs)
    

    修剪数据。小于lower的值替换为lower;大于upper的值替换为upper。

    同样int与int比较,str与str比较。

    常用参数介绍:
    • lower:float or array_like, default None
    In [47]: pd.Series(['a', 'b', 'c', 'd', 'e', 'f']).clip('b', 'd')                                                                       
    Out[47]: 
    0    b
    1    b
    2    c
    3    d
    4    d
    5    d
    dtype: object
    
    In [49]: c_s.clip(0.20, 0.25)                                                                                                           
    Out[49]: 
    0    0.25
    1    0.25
    2    0.20
    3    0.20
    dtype: float64
    
    # 应用array_like类型
    In [50]: t = pd.Series([2, -4, -1, 6, 3])                                                                                               
    In [51]: df = pd.DataFrame({'col_0': [9, -3, 0, -1, 5], 'col_1': [-2, -7, 6, 8, -5]})                                                   
    In [52]: df.clip(t, t + 4, axis=0)                                                                                                      
    Out[52]: 
       col_0  col_1
    0      6      2
    1     -3     -4
    2      0      3
    3      6      8
    4      5      3
    
    clip.png

    7. Series.corr()

    Series.corr(other, method='pearson', min_periods=None)
    

    计算两个Series的相关性,排除缺失值。

    常用参数介绍:
    • method:{‘pearson’, ‘kendall’, ‘spearman’} or callable 【计算相关性的方法】
      • pearson:标准相关系数
      • kendall:Kendall Tau相关系数
      • Spearman:Spearman等级相关
      • callable:输入两个1d ndarray并返回浮点数的可调用对象
    In [56]: def histogram_intersection(a, b): 
        ...:     v = np.minimum(a, b).sum().round(decimals=1) 
        ...:     return v                                                                                                                               
    
    In [57]: s1 = pd.Series([.2, .0, .6, .2]) 
        ...: s2 = pd.Series([.3, .6, .0, .1]) 
        ...: s1.corr(s2, method=histogram_intersection)                                                                                     
    Out[57]: 0.3
    

    8. Series.count()

    Series.count(level=None)
    

    返回Series中非空值的数量

    In [59]: s = pd.Series([0.0, 1.0, np.nan])                                               
    In [60]: s.count()                                                                                                                      
    Out[60]: 2
    

    9. Series.cov()

    Series.cov(other, min_periods=None, ddof=1)
    

    计算Series的协方差,排除缺失值。

    In [58]: s1 = pd.Series([0.90010907, 0.13484424, 0.62036035]) 
        ...: s2 = pd.Series([0.12528585, 0.26962463, 0.51111198]) 
        ...: s1.cov(s2)                                                                                                                     
    Out[58]: -0.01685762652715874
    

    10. Series.cummax()

    Series.cummax(axis=None, skipna=True, *args, **kwargs)
    

    沿轴计算累积最大值。

    In [61]: pd.Series([2, np.nan, 5, -1, 0]).cummax()                                                                                      
    Out[61]: 
    0    2.0
    1    NaN
    2    5.0
    3    5.0
    4    5.0
    dtype: float64
    

    11. Series.cummin()

    Series.cummin(axis=None, skipna=True, *args, **kwargs)
    

    沿轴计算累积最小值。

    In [62]: pd.Series([2, np.nan, 5, -1, 0]).cummin()                                                                                      
    Out[62]: 
    0    2.0
    1    NaN
    2    2.0
    3   -1.0
    4   -1.0
    dtype: float64
    

    12. Series.cumprod()

    Series.cumprod(axis=None, skipna=True, *args, **kwargs)
    

    沿轴计算累积相乘。

    In [63]: pd.Series([2, np.nan, 5, -1, 0]).cumprod()                                                                                     
    Out[63]: 
    0     2.0
    1     NaN
    2    10.0
    3   -10.0
    4    -0.0
    dtype: float64
    

    13. Series.cumsum()

    Series.cumsum(axis=None, skipna=True, *args, **kwargs)
    

    沿轴计算累积相加。

    In [64]: pd.Series([2, np.nan, 5, -1, 0]).cumsum()                                                                                      
    Out[64]: 
    0    2.0
    1    NaN
    2    7.0
    3    6.0
    4    6.0
    dtype: float64
    

    14. Series.describe()

    Series.describe(percentiles=None, include=None, exclude=None, datetime_is_numeric=False)
    

    生成描述性统计信息.

    常用参数介绍:
    • percentiles:list-like of numbers, optional 【包含在输出中的百分比。所有值都应介于0和1之间。默认为返回第25、50和75个百分位数。[.25, .5, .75]
    • include:‘all’, list-like of dtypes or None (default), optional 【要包括在结果中的数据类型的白名单,该参数只对DataFrame有效】
      • ‘all’: All columns of the input will be included in the output 【包含全部类型列】
      • A list-like of dtypes: Limits the results to the provided data types 【自定义类型列表】
      • None (default): The result will include all numeric columns 【仅包含全部数值类型列】
    • exclude:list-like of dtypes or None (default), optional 【要从结果中忽略的数据类型】
    • datetime_is_numeric:bool, default False 【是否将datetime dtypes视为数字类型】
    # 描述一个数值型的Series
    In [65]: s = pd.Series([1, 2, 3]) 
        ...: s.describe()                                                                                                                   
    Out[65]: 
    count    3.0
    mean     2.0
    std      1.0
    min      1.0
    25%      1.5
    50%      2.0
    75%      2.5
    max      3.0
    dtype: float64
    
    # 描述一个str型的Series
    In [66]: s = pd.Series(['a', 'a', 'b', 'c']) 
        ...: s.describe()                                                                                                                   
    Out[66]: 
    count     4
    unique    3
    top       a
    freq      2
    dtype: object
    
    # 描述一个时间戳的Series
    In [70]: s = pd.Series([ 
        ...:   np.datetime64("2000-01-01"), 
        ...:   np.datetime64("2010-01-01"), 
        ...:   np.datetime64("2010-01-01") 
        ...: ]) 
        ...: s.describe()                                                                                                                   
    Out[70]: 
    count                       3
    unique                      2
    top       2010-01-01 00:00:00
    freq                        2
    first     2000-01-01 00:00:00
    last      2010-01-01 00:00:00
    dtype: object
    

    15. Series.diff()

    Series.diff(periods=1)
    

    计算当前元素与自己的第前periods的差值,periods可以为负数(负数时与后第periods比较)。

    In [72]: s = pd.Series([1, 1, 2, 3, 5, 8]) 
        ...: s.diff()                                                                                                                       
    Out[72]: 
    0    NaN
    1    0.0
    2    1.0
    3    1.0
    4    2.0
    5    3.0
    dtype: float64
    

    16. Series.factorize()

    Series.factorize(sort=False, na_sentinel=-1)
    

    将对象编码为枚举(enumerated)类型或分类(categorical)变量。

    常用参数介绍:
    • sort:bool, default False 【是否将返回值进行排序 uniques的排序优先级高】
    • na_sentinel:int or None, default -1 【如何标记NaN值,注意⚠️ uniques默认不会包含缺失值。如果需要pandas中包含NaN,可以设置na_sentinel为None】
    返回值介绍:
    • codes:ndarray 【An integer ndarray,是uniques的索引器】
    • uniques:ndarray, Index, or Categorical 【唯一有效值】
    In [73]: codes, uniques = pd.factorize(['b', 'b', 'a', 'c', 'b'])                                                                       
    In [74]: codes                                                                                                                          
    Out[74]: array([0, 0, 1, 2, 0])
    In [75]: uniques                                                                                                                        
    Out[75]: array(['b', 'a', 'c'], dtype=object)
    
    # 排序
    In [76]: codes, uniques = pd.factorize(['b', 'b', 'a', 'c', 'b'], sort=True)             
    In [77]: codes                                                                                                                          
    Out[77]: array([1, 1, 0, 2, 1])
    In [78]: uniques                                                                                                                        
    Out[78]: array(['a', 'b', 'c'], dtype=object)
    
    # 当Series存在缺失值时
    In [80]: codes, uniques = pd.factorize(['b', None, 'a', 'c', 'b'])                       
    In [81]: codes                                                                                                                          
    Out[81]: array([ 0, -1,  1,  2,  0])
    In [82]: uniques                                                                                                                        
    Out[82]: array(['b', 'a', 'c'], dtype=object)
    
    # Series直接调用
    In [88]: pd.Series([1, 1, 2, 3, 5, 8]).factorize()                                                                                      
    Out[88]: (array([0, 0, 1, 2, 3, 4]), Int64Index([1, 2, 3, 5, 8], dtype='int64'))
    

    17. Series.kurt()

    Series.kurt(axis=None, skipna=None, level=None, numeric_only=None, **kwargs)
    

    在请求的轴上返回无偏峰度。使用费舍尔峰度定义(正常峰度== 0.0)获得峰度。由N-1归一化。

    In [89]: pd.Series([1, 1, 2, 3, 5, 8]).kurt()                                                                                           
    Out[89]: 0.5859374999999982
    

    18. Series.mad()

    Series.mad(axis=None, skipna=None, level=None)
    

    返回所请求轴的值的平均绝对偏差。

    In [90]: pd.Series([1, 1, 2, 3, 5, 8]).mad()                                                                                            
    Out[90]: 2.111111111111111
    

    19. Series.max()

    Series.max(axis=None, skipna=None, level=None, numeric_only=None, **kwargs)
    

    沿指定轴计算最大值

    In [91]: pd.Series([1, 1, 2, 3, 5, 8]).max()                                                                                            
    Out[91]: 8
    

    20. Series.min()

    Series.min(axis=None, skipna=None, level=None, numeric_only=None, **kwargs)
    

    沿指定轴计算最小值

    In [91]: pd.Series([1, 1, 2, 3, 5, 8]).min()                                                                                            
    Out[91]: 1
    

    21. Series.mean()

    Series.mean(axis=None, skipna=None, level=None, numeric_only=None, **kwargs)
    

    沿指定轴计算平均值

    In [91]: pd.Series([1, 1, 2, 3, 5, 8]).mean()                                                                                            
    Out[91]: 3.3333333333333335
    

    22. Series.median()

    Series.median(axis=None, skipna=None, level=None, numeric_only=None, **kwargs)
    

    沿指定轴计算中位数

    # 偶数时中间两数相加/2
    In [91]: pd.Series([1, 1, 2, 3, 5, 8]).median()                                                                                            
    Out[91]: 2.5
    

    相关文章

      网友评论

          本文标题:Series第七讲 计算/描述统计(上)

          本文链接:https://www.haomeiwen.com/subject/xbxgyktx.html