美文网首页我爱编程
pandas入门(2):汇总和计算描述统计

pandas入门(2):汇总和计算描述统计

作者: WeirdoSu | 来源:发表于2017-12-17 21:00 被阅读0次

    常用的数学和统计方法

    pandas对象拥有一组常用的数学和统计方法。他们大都属于约简和汇总统计,用于从Series提取单个值(如summean)或从DataFrame的行或列中提取一个Series。它们都是基于没有缺失数据的假设而构建的。

    例:

    In [4]: df = DataFrame([[1.4, np.nan], [7.1, -4.5], [np.nan, np.nan], [0.75, -1.3]], index=['a', 'b', 'c', 'd'], columns=['one', 'two'])
    
    In [5]: df
    Out[5]: 
        one  two
    a  1.40  NaN
    b  7.10 -4.5
    c   NaN  NaN
    d  0.75 -1.3
    
    In [6]: df.sum()
    Out[6]: 
    one    9.25
    two   -5.80
    dtype: float64
    
    In [7]: df.sum(axis=1)
    Out[7]: 
    a    1.40
    b    2.60
    c    0.00
    d   -0.55
    dtype: float64
    

    NA值会自动被排除,除非整个切片都是NA。通过skipna(skip NA)选项可以禁用该功能:

    In [8]: df.mean(axis=1, skipna=False)
    Out[8]: 
    a      NaN
    b    1.300
    c      NaN
    d   -0.275
    dtype: float64
    

    约简方法的选项:axisskipnalevel(如果轴是层次化索引的,则根据level分组约简)。

    有些方法(如idxminidxmax)返回的是间接统计(比如达到最小值最大值的索引):

    In [9]: df.idxmax()
    Out[9]: 
    one    b
    two    d
    dtype: object
    

    有些方法则是累计型的:

    In [10]: df.cumsum()
    Out[10]: 
        one  two
    a  1.40  NaN
    b  8.50 -4.5
    c   NaN  NaN
    d  9.25 -5.8
    

    还有一些,比如describe,用于一次性产生多个汇总统计:

    In [11]: df.describe()
    Out[11]: 
                one       two
    count  3.000000  2.000000
    mean   3.083333 -2.900000
    std    3.493685  2.262742
    min    0.750000 -4.500000
    25%    1.075000 -3.700000
    50%    1.400000 -2.900000
    75%    4.250000 -2.100000
    max    7.100000 -1.300000
    

    对于非数值型数据,describe会产生另外一种汇总统计:

    In [12]: obj = Series(['a', 'a', 'b', 'c'] * 4)
    In [14]: obj.describe()
    Out[14]: 
    count     16
    unique     3
    top        a
    freq       8
    dtype: object
    

    所有与描述统计相关的方法:见#2467

    相关系数与协方差(?):

    通过参数对计算出来的:
    Seriescorr方法用来计算两个Series中重叠的、非NA的、按索引对齐的值的相关系数,cov用于计算协方差:

    In [39]: test.describe()
    Out[39]: 
                  Open         High          Low        Close    Adj Close  \
    count  1594.000000  1594.000000  1594.000000  1594.000000  1594.000000   
    mean      4.681644     4.759398     4.611951     4.688137     4.515610   
    std       1.280538     1.327283     1.237487     1.285679     1.240624   
    min       2.980000     2.990000     2.960000     2.980000     2.886848   
    25%       3.550000     3.580000     3.510000     3.550000     3.433305   
    50%       4.545000     4.605000     4.470000     4.540000     4.412471   
    75%       5.450000     5.540000     5.360000     5.450000     5.212986   
    max      10.430000    10.740000     9.850000    10.540000    10.383811   
    
                 Volume  
    count  1.594000e+03  
    mean   1.460281e+08  
    std    1.729750e+08  
    min    0.000000e+00  
    25%    5.921724e+07  
    50%    9.124301e+07  
    75%    1.464500e+08  
    max    1.644112e+09  
    
    In [40]: returns.tail()
    Out[40]: 
                000001.SS  399001.SZ
    Date                            
    2016-12-26   0.003992   0.003290
    2016-12-27  -0.002532  -0.000278
    2016-12-28  -0.003990  -0.004243
    2016-12-29  -0.001979  -0.002720
    2016-12-30   0.002435   0.001741
    
    In [41]: returns['000001.SS'].corr(returns['399001.SZ'])
    Out[41]: 0.93169755572940594
    
    In [42]: returns['000001.SS'].cov(returns['399001.SZ'])
    Out[42]: 0.00023805940957128392
    

    DataFramecorrcov方法将以DataFrame的形式返回完整的相关系数或协方差矩阵:

    In [43]: returns.corr()
    Out[43]: 
               000001.SS  399001.SZ
    000001.SS   1.000000   0.931698
    399001.SZ   0.931698   1.000000
    
    In [44]: returns.cov()
    Out[44]: 
               000001.SS  399001.SZ
    000001.SS   0.000217   0.000238
    399001.SZ   0.000238   0.000301
    

    利用DataFramecorrwith方法,可以计算其列或行跟另一个SeriesDataFrame之间的相关系数。

    传入一个Series将会返回一个相关系数值Series(针对各列进行计算):

    In [46]: returns.corrwith(returns['000001.SS'])
    Out[46]: 
    000001.SS    1.000000
    399001.SZ    0.931698
    dtype: float64
    

    传入一个DataFrame则会计算按列名配对的相关系数:

    这里计算百分比变化与成交量的相关系数:

    In [47]: returns.corrwith(volume)
    Out[47]: 
    000001.SS    0.066091
    399001.SZ   -0.007895
    dtype: float64
    

    唯一值(unique)、值计数(value_counts)以及成员资格(isin):

    从一维Series的值中抽取信息:

    例:

    In [48]: obj = Series(['c', 'a', 'd', 'a', 'a', 'b', 'b', 'c', 'c'])
    In [49]: uniques = obj.unique()
    
    In [50]: uniques
    Out[50]: array(['c', 'a', 'd', 'b'], dtype=object)
    

    value_counts用于计算一个Series中各值出现的频率:

    结果是按值频率降序排列:

    In [51]: obj.value_counts()
    Out[51]: 
    c    3
    a    3
    b    2
    d    1
    dtype: int64
    

    isin用于判断矢量化集合的成员资格,可用于选取子集:

    In [52]: mask = obj.isin(['b', 'c'])
    
    In [53]: mask
    Out[53]: 
    0     True
    1    False
    2    False
    3    False
    4    False
    5     True
    6     True
    7     True
    8     True
    dtype: bool
    
    In [54]: obj[mask]
    Out[54]: 
    0    c
    5    b
    6    b
    7    c
    8    c
    dtype: object
    

    相关文章

      网友评论

        本文标题:pandas入门(2):汇总和计算描述统计

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