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

2020-09-22  本文已影响0人  butters001

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

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

计算/描述统计(上)

详细介绍

首先导入所需依赖包

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沿轴计算)。

常用参数介绍:
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的自相关

常用参数介绍:
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比较。

常用参数介绍:
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比较。

常用参数介绍:
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的相关性,排除缺失值。

常用参数介绍:
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)

生成描述性统计信息.

常用参数介绍:
# 描述一个数值型的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)变量。

常用参数介绍:
返回值介绍:
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
上一篇下一篇

猜你喜欢

热点阅读