pandas 统计类函数

文章目录

  • pandas 统计类函数
    • 1.汇总类统计
      • 1.统计描述describe()
      • 2.计数count()
      • 3.求和sum()
      • 4.平均值mean()
      • 5.最大值max()
      • 6.最小值max()
      • 7.中位数median()
      • 8.众数mode()
      • 9.绝对值abs()
      • 10.乘积prod()
      • 11.方差var()
      • 12.标准差std()
      • 13.累计求和cumsum()
    • 2.去重和按值计数
      • 1.去重unique()
      • 2.非重复计数nunique()
      • 3.按值计数value_counts()
    • 3.协方差和相关系数
      • 1.协方差和相关系数简介
      • 2.计算协方差
      • 3.计算相关系数

先生成测试数据,包括学生各科成绩:

import pandas as pd
data=pd.DataFrame({'name':['Abbe','Tony','Henry','Perry','Billy','Tracy'],'english':[99,89,68,73,82,78],'math':[89,81,78,69,81,92],'science':[81,83,87,91,86,92]})
data
name english math science
0 Abbe 99 89 81
1 Tony 89 81 83
2 Henry 68 78 87
3 Perry 73 69 91
4 Billy 82 81 86
5 Tracy 78 92 92

1.汇总类统计

1.统计描述describe()

返回 DataFrame 中数值列数据的常见统计数据,返回一个 DataFrame 的数据表。

具体如下:

count(计数)、mean(平均值)、std(标准差)、min(最小值)、

25%(排在25%处的值)、50%(排在50%处的值)、75%(排在75%处的值)、max(最大值) 等。

data.describe()
english math science
count 6.000000 6.000000 6.000000
mean 81.500000 81.666667 86.666667
std 11.220517 8.189424 4.320494
min 68.000000 69.000000 81.000000
25% 74.250000 78.750000 83.750000
50% 80.000000 81.000000 86.500000
75% 87.250000 87.000000 90.000000
max 99.000000 92.000000 92.000000

也可以只对某一列进行统计描述,返回一个 Series 类型的数据。

data['english'].describe()
count     6.000000
mean     81.500000
std      11.220517
min      68.000000
25%      74.250000
50%      80.000000
75%      87.250000
max      99.000000
Name: english, dtype: float64

2.计数count()

对每列或每行的非空单元格进行计数

参数列表:

DataFrame.count(axis=0, level=None, numeric_only=False)

axis : {0 or ‘index’, 1 or ‘columns’},默认为 0。

  • If 0 or ‘index’:为每列生成计数。
  • If 1 or ‘columns’:为每行生成计数。

返回 DataFrame 中 所有行/列 的计数,返回一个 Series 类型的数据。

列计数

data.count()    # 默认axis=0,为列生成计数
name       6
english    6
math       6
science    6
dtype: int64

行计数

data.count(axis=1)    # axis=1,为行生成计数
0    4
1    4
2    4
3    4
4    4
5    4
dtype: int64

3.求和sum()

返回请求轴的值之和。

参数列表:

data.sum(axis=0, skipna=None, level=None, numeric_only=None, min_count=0, **kwargs,)

axis : {index (0), columns (1)}

axis也是默认为0(列求和),axis=1时表示行求和。

返回 DataFrame 中 所有行/列 的求和,返回一个 Series 类型的数据。

列求和

data.sum()    # 默认axis=0,进行 列求和
name       AbbeTonyHenryPerryBillyTracy
english                             489
math                                490
science                             520
dtype: object

注:在python中,字符串类型的数据也可以直接进行求和(连接字符串)。

行求和

data.sum(axis=1)    # axis=1,进行 行求和
0    269
1    253
2    233
3    233
4    249
5    262
dtype: int64

案例:我们就可以新增一列,来存放每个学生的总成绩。

new_data=data.assign(总成绩=data.sum(axis=1))
new_data
name english math science 总成绩
0 Abbe 99 89 81 269
1 Tony 89 81 83 253
2 Henry 68 78 87 233
3 Perry 73 69 91 233
4 Billy 82 81 86 249
5 Tracy 78 92 92 262

注:后面的每一个函数都可以对 axis 值进行设定,表示对行/列进行操作,就不一一赘述。

4.平均值mean()

返回 DataFrame 中 数值行/列 的平均值,返回一个 Series 类型的数据。

data.mean()
english    81.500000
math       81.666667
science    86.666667
dtype: float64

5.最大值max()

返回 DataFrame 中 所有行/列 的最大值,返回一个 Series 类型的数据。

data.max()
name       Tracy
english       99
math          92
science       92
dtype: object

注:在python中,字符串类型的数据也可以比大小(根据字母排序)。

6.最小值max()

返回 DataFrame 中 所有行/列 的最小值,返回一个 Series 类型的数据。

data.min()
name       Abbe
english      68
math         69
science      81
dtype: object

7.中位数median()

中位数是指按顺序排列的一组数据中居于中间位置的数。

data.median()
english    80.0
math       81.0
science    86.5
dtype: float64

8.众数mode()

众数是指一组数据中出现次数最多的数。

data.mode()
name english math science
0 Abbe 68 81.0 81
1 Billy 73 NaN 83
2 Henry 78 NaN 86
3 Perry 82 NaN 87
4 Tony 89 NaN 91
5 Tracy 99 NaN 92

9.绝对值abs()

返回数据的绝对值。

注意:绝对值函数abs()是针对数值型的字段,不能对字符类型的字段求绝对值。

data[['english','math']].abs()
english math
0 99 89
1 89 81
2 68 78
3 73 69
4 82 81
5 78 92

10.乘积prod()

返回请求轴的值之积。

data.prod()
english    279746994384
math       289128940776
science    421124040792
dtype: int64

11.方差var()

方差是衡量随机变量或一组数据离散程度的度量

每个样本值与全体样本值的平均数之差的平方和的平均数。

需要注意的是:numpy中的方差叫总体方差,pandas中的方差叫样本方差

总体方差的分母为 n ,是有偏的;样本方差的分母为 n-1 ,是无偏的

参考:百度百科-方差

data.var()
english    125.900000
math        67.066667
science     18.666667
dtype: float64

验证英语学科的方差

  • 1.平均值:data[‘english’].mean()=81.5;

  • 2.用英语成绩中的每个元素依次减去平均值,然后求平方和:

    (68-81.5)**2+(73-81.5)**2+(78-81.5)**2+(82-81.5)**2+(89-81.5)**2+(99-81.5)**2;

  • 3.最后除以 样本例数n-1 ,即除以6-1=5。

((68-81.5)**2+(73-81.5)**2+(78-81.5)**2+(82-81.5)**2+(89-81.5)**2+(99-81.5)**2)/5
125.9

12.标准差std()

返回 DataFrame 中 数值行/列 的标准差值,返回一个 Series 类型的数据。

标准差是 一组数据离散程度 的一种度量。

一个较大的标准差,代表大部分数值和其平均值之间差异较大;

一个较小的标准差,代表这些数值较接近平均值。

参考:百度百科-标准差

data.std()
english    11.220517
math        8.189424
science     4.320494
dtype: float64

13.累计求和cumsum()

可以对指定轴进行 行或列的累计求和(包括字符串类型的列)。

data.cumsum()
name english math science
0 Abbe 99 89 81
1 AbbeTony 188 170 164
2 AbbeTonyHenry 256 248 251
3 AbbeTonyHenryPerry 329 317 342
4 AbbeTonyHenryPerryBilly 411 398 428
5 AbbeTonyHenryPerryBillyTracy 489 490 520

这与窗口函数 expanding().sum() 实现的效果是一样的。

只是expanding().sum()只会对数值类型的数据进行累计求和。

data.expanding().sum()
english math science
0 99.0 89.0 81.0
1 188.0 170.0 164.0
2 256.0 248.0 251.0
3 329.0 317.0 342.0
4 411.0 398.0 428.0
5 489.0 490.0 520.0

2.去重和按值计数

1.去重unique()

查看某一行或列有哪些非非重复值。

一般不用于数值列,而是枚举、分类列。返回一个 ndarray 类型的数据。

data['name'].unique()
array(['Abbe', 'Tony', 'Henry', 'Perry', 'Billy', 'Tracy'], dtype=object)

2.非重复计数nunique()

如何统计非重复值的个数呢?

由于unique()函数返回的数据类型为 ndarray ,不能直接使用count()函数。

ndarray类型的数据有一个 shape 属性,返回 ndarray数据的行和列,ndarray.shape[0] 就代表了ndarray数据的行数。

所以我们可以用下面的方式来获取去重后的个数

data['name'].unique().shape[0]
6

pandas还专门提供了一个函数 nunique() ,来进行非重复计数。

data['name'].nunique()
6

3.按值计数value_counts()

value_counts()函数可以对某列的各个值统计个数,返回一个 Series 类型的数据。

data['math'].value_counts()  # 统计数学成绩中各个值出现的次数
81    2
92    1
78    1
69    1
89    1
Name: math, dtype: int64

3.协方差和相关系数

1.协方差和相关系数简介

协方差:corvariance;相关系数:correlation

协方差

简单地来说,协方差就是反映两个变量 X 和 Y 的相互关系。这种相互关系大致分为三种:正相关、负相关、不相关

什么是正相关呢?例如:房屋面积(X)越大,房屋总价(Y)越高,则房屋面积与房屋总价是正相关的;

什么是负相关呢?例如:一个学生打游戏的时间(X)越多,学习成绩(Y)越差,则打游戏时间与学习成绩是负相关的;

什么是不相关呢?例如:一个人皮肤的黑白程度(X)与他的身体健康程度(Y)并无明显关系,所以是不相关的。

相关系数

计算协方差的时候我们并没有把不同变量幅值差异性考虑进来,在比较协方差的时候也就没有一个统一的量纲标准。

所以,为了消除这一影响,为了准确得到变量之间的相似程度,我们需要把协方差除以各自变量的标准差

可见,相关系数就是在协方差的基础上除以变量 X 和 Y 的标准差。

为什么除以各自变量的标准差就能消除幅值影响呢?这是因为标准差本身反映了变量的幅值变化程度,除以标准差正好能起到抵消的作用,让协方差标准化。这样,相关系数的范围就被归一化到 [-1,1] 之间了

总结

相关系数是协方差的标准化、归一化形式,消除了量纲、幅值变化不一的影响。

实际应用中,在比较不同变量之间相关性时,使用相关系数更为科学和准确。

参考:通俗解释协方差与相关系数

2.计算协方差

协方差和相关系数都是一个相互的概念,必须计算两个变量(两列)之间的协方差或相关系数,不能只用一列来计算协方差或相关系数。

使用 cov() 函数来计算协方差。

协方差矩阵(计算 DataFrame 中任意“数值列”之间的协方差):

data.cov()
english math science
english 125.9 48.800000 -37.400000
math 48.8 67.066667 -7.933333
science -37.4 -7.933333 18.666667

计算指定两列之间的协方差

# 计算英语和数学之间的协方差
data['english'].cov(data['science'])
-37.4

3.计算相关系数

使用 corr() 函数来计算相关系数。

相关系数矩阵(计算 DataFrame 中任意“数值列”之间的相关系数):

data.corr()
english math science
english 1.000000 0.531072 -0.771481
math 0.531072 1.000000 -0.224217
science -0.771481 -0.224217 1.000000

计算指定两列之间的相关系数

# 计算英语和数学之间的相关系数
data['english'].corr(data['math'])
0.5310722343446015

pandas 统计类函数相关推荐

  1. 数据分析工具Pandas(6):Pandas统计计算和描述

    数据分析工具Pandas(1):Pandas的数据结构 数据分析工具Pandas(2):Pandas的索引操作 数据分析工具Pandas(3):Pandas的对齐运算 数据分析工具Pandas(4): ...

  2. pandas统计缺失值的个数

    pandas 统计缺失值个数,可以使用 df['whole_post_clean'].isnull().sum()

  3. excel常用函数公式及技巧_Excel统计类函数公式应用技巧解读,绝对的硬核干货!...

    Excel的功能在于对数据进行统计和计算,其自带了很多的函数,利用这些函数可以完成很多的实际需求,经过加工和处理,还可以组成很多的公式,其功能就更加的强大,今天,小编带大家了解一下Excel中的常用的 ...

  4. Python数据分析 1-5 NumPy中ufunc函数(一)主要介绍NumPy中常用的通用函数:基本数学函数、三角函数和反三角函数和统计类函数

    1 引入NumPy #引入numpy import numpy as np np.__version__ '1.20.1' 2 基本数学函数 NumPy中基本数学函数有加法.减法.乘法.除法.乘方.开 ...

  5. pandas统计重复值次数

    pandas统计数据项重复值次数和删除 from pandas import DataFramedf = DataFrame({'key1':['a','a','b','b','a','a'],'ke ...

  6. Python+pandas统计每个学生学习慕课总时长

    推荐图书: <Python程序设计(第3版)>,(ISBN:978-7-302-55083-9),清华大学出版社,2020年6月第1次印刷 京东购买链接:https://item.jd.c ...

  7. pandas 统计一周中的每个位置的NO2平均浓度

    统计一周中的每个位置的NO2平均浓度 df.groupby([air_quality["datetime"].dt.weekday, "location"])[ ...

  8. pandas统计文章字数:TypeError: object of type ‘float‘ has no len()

    使用pandas.read_csv()读取文件, 统计文章字数时:train['text_len'] = train['text'].map(len) 报错: TypeError: object of ...

  9. [Excel函数] 计算统计类函数

    Excel公式规范: (1) 在Excel中输入函数时,是不区分大小写的 (2) 在公式函数中,每个参数都是用逗号分隔的 (3) 参数中的文本要用双引号引起来,对于单纯的数字是不用双引号的 (4) 一 ...

最新文章

  1. boost库之socket 非阻塞/缓冲区大小等属性设置
  2. 2.1.1 正则化基本介绍
  3. alertdialog怎么水平排列_轻钢二级吊顶怎么安装
  4. VS2022+.NET6 RC1+C#10,.NET开发起飞
  5. LazyInitializationException--由于session关闭引发的异常
  6. linux QT 结束当前进程_Qt编写控件属性设计器7-串口采集
  7. 转向与重定向的联系与区别
  8. 精通 TensorFlow 1.x·翻译完成
  9. Y2161 Hibernate第三次考试 2016年8月18日 试卷分析
  10. 华为P40或将搭载鸿蒙,华为P40或将在明年3月发布,很有可能是首部搭载鸿蒙的手机...
  11. Blocking waiting for file lock on package cache
  12. 动态规划1——生产线调度问题(Dynamic Programming)
  13. 修改windows默认远程管理端口
  14. python 自动办公ppt_python自动化办公操作PPT的实现
  15. java 旋转方向_Java 旋转PDF页面方向
  16. bjui ajax.js,B-JUI 前端管理框架
  17. Pandas(数据分析处理库)---讲解
  18. 冷水机组选型公式与运行参数
  19. 概率论01-样本空间,随机事件
  20. Android发展趋势分析,droidcon北京2017安卓技术大会参会感悟

热门文章

  1. 又双叒叕有银行与腾讯云合作了,这次是中信银行!
  2. JavaScript箭头函数返回箭头函数
  3. SharePoint 入门
  4. 开题报告:基于java摄影图片分享网站系统 毕业设计论文开题报告模板
  5. 深度学习中的卷积操作
  6. 【信息系统安全/计算机系统安全】期末复习(HITWH)
  7. aix 安装oracle 12c,AIX安装oracle12C
  8. Oracle 的 decode 函数用法
  9. linux 系统挂载移动硬盘,解决移动硬盘插入linux无反应问题
  10. cv2.magnitude 详解