美文网首页
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第七讲 计算/描述统计(上)

    Series第七讲 计算/描述统计(上) 本节课将讲解Pandas-Series的计算/描述统计,由于接口过多,将...

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

    Series第七讲 计算/描述统计(下) 本节课将讲解Pandas-Series的计算/描述统计,由于接口过多,将...

  • pandas统计

    import pandas as pd import numpy as np 汇总与计算描述统计 Series 在...

  • pandas(三)

    汇总和计算描述统计 调用DataFrame的sum方法将会返回一个含有列小计的Series: 传入axis=1将会...

  • Series第一讲 属性

    Series第一讲 属性 属性总览 Series.index Series.array Series.values...

  • pandas 面试题挑战五

    计算两个Series之间的均方误差 现有两个Series如下: 计算两个Series之间的均方误差解决办法: 输出...

  • 工具:数据分析(统计学)

    方法:描述统计、推断统计 数据:数值数据和分类数据(类别、文本,不能进行计算) 分类数据描述统计:频数统计、频数百...

  • 基本统计量应用

    案例 使用基本描述统计量计算存款金额的基本描述统计量,并分别对城镇储户和农村储户进行比较。 数据 实验体会 首先拿...

  • Series第九讲 时间相关的Series

    Series第九讲 时间相关的Series 本节课将讲解Pandas-Series中关于时间的接口。 时间相关 S...

  • Series第二讲 二元运算

    Series第二讲 二元运算 二元运算方法总览 Series.add/radd 加 Series.sub/rsub...

网友评论

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

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