pandas 统计类函数
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 统计类函数相关推荐
- 数据分析工具Pandas(6):Pandas统计计算和描述
数据分析工具Pandas(1):Pandas的数据结构 数据分析工具Pandas(2):Pandas的索引操作 数据分析工具Pandas(3):Pandas的对齐运算 数据分析工具Pandas(4): ...
- pandas统计缺失值的个数
pandas 统计缺失值个数,可以使用 df['whole_post_clean'].isnull().sum()
- excel常用函数公式及技巧_Excel统计类函数公式应用技巧解读,绝对的硬核干货!...
Excel的功能在于对数据进行统计和计算,其自带了很多的函数,利用这些函数可以完成很多的实际需求,经过加工和处理,还可以组成很多的公式,其功能就更加的强大,今天,小编带大家了解一下Excel中的常用的 ...
- Python数据分析 1-5 NumPy中ufunc函数(一)主要介绍NumPy中常用的通用函数:基本数学函数、三角函数和反三角函数和统计类函数
1 引入NumPy #引入numpy import numpy as np np.__version__ '1.20.1' 2 基本数学函数 NumPy中基本数学函数有加法.减法.乘法.除法.乘方.开 ...
- pandas统计重复值次数
pandas统计数据项重复值次数和删除 from pandas import DataFramedf = DataFrame({'key1':['a','a','b','b','a','a'],'ke ...
- Python+pandas统计每个学生学习慕课总时长
推荐图书: <Python程序设计(第3版)>,(ISBN:978-7-302-55083-9),清华大学出版社,2020年6月第1次印刷 京东购买链接:https://item.jd.c ...
- pandas 统计一周中的每个位置的NO2平均浓度
统计一周中的每个位置的NO2平均浓度 df.groupby([air_quality["datetime"].dt.weekday, "location"])[ ...
- pandas统计文章字数:TypeError: object of type ‘float‘ has no len()
使用pandas.read_csv()读取文件, 统计文章字数时:train['text_len'] = train['text'].map(len) 报错: TypeError: object of ...
- [Excel函数] 计算统计类函数
Excel公式规范: (1) 在Excel中输入函数时,是不区分大小写的 (2) 在公式函数中,每个参数都是用逗号分隔的 (3) 参数中的文本要用双引号引起来,对于单纯的数字是不用双引号的 (4) 一 ...
最新文章
- boost库之socket 非阻塞/缓冲区大小等属性设置
- 2.1.1 正则化基本介绍
- alertdialog怎么水平排列_轻钢二级吊顶怎么安装
- VS2022+.NET6 RC1+C#10,.NET开发起飞
- LazyInitializationException--由于session关闭引发的异常
- linux QT 结束当前进程_Qt编写控件属性设计器7-串口采集
- 转向与重定向的联系与区别
- 精通 TensorFlow 1.x·翻译完成
- Y2161 Hibernate第三次考试 2016年8月18日 试卷分析
- 华为P40或将搭载鸿蒙,华为P40或将在明年3月发布,很有可能是首部搭载鸿蒙的手机...
- Blocking waiting for file lock on package cache
- 动态规划1——生产线调度问题(Dynamic Programming)
- 修改windows默认远程管理端口
- python 自动办公ppt_python自动化办公操作PPT的实现
- java 旋转方向_Java 旋转PDF页面方向
- bjui ajax.js,B-JUI 前端管理框架
- Pandas(数据分析处理库)---讲解
- 冷水机组选型公式与运行参数
- 概率论01-样本空间,随机事件
- Android发展趋势分析,droidcon北京2017安卓技术大会参会感悟