欢迎访问我搞事情的【知乎账号】:Coffee
以及我的【B站漫威剪辑账号】:VideosMan
若我的笔记对你有帮助,请用小小的手指,点一个大大的赞哦。
关于DataFrame的相关知识,我还进行了汇总,欢迎点赞收藏!!
【Python学习笔记—保姆版】第四章—关于Pandas、数据准备、数据处理、数据分析、数据可视化
如果分组字段是离散值,则直接使用groupby分组统计
基本统计分析:又叫描述性统计分析,一般统计某个变量的最小值、第一个四分位值、中值、第三个四分位值、以及最大值。
describe() 描述性统计分析函数
常用的统计函数:
size 计数(此函数不需要括号)
sum() 求和
mean() 平均值
var() 方差
std() 标准差
(22条消息) Python对表的行列求和_OlivierJ的博客-CSDN博客_python 列求和
如果分组字段是连续值,则先进行离散化(cut),然后再使用groupby分组
分组分析:是指根据分组字段将分析对象划分成不同的部分,以进行对比分析各组之间的差异性的一种分析方法。
常用的统计指标:计数、求和、平均值
常用形式:
df.groupby(by=['分类1','分类2',...])['被统计的列'].agg({列别名1:统计函数1,列别名2:统计函数2,…})
by 用于分组的列
[ ] 用于统计的列
.agg 统计别名显示统计值的名称,统计函数用于统计数据
size 计数
sum 求和
mean 均值
from pandas import read_excel df = read_excel('e:\\rz4.xlsx') df
Out[1]:
学号 班级 姓名 性别 英语 体育 军训 数分 高代 解几 计算机
0 2308024241 23080242 成龙 男 76 78 77 40 23 60 89
1 2308024244 23080242 周怡 女 66 91 75 47 47 44 82
2 2308024251 23080242 张波 男 85 81 75 45 45 60 80
3 2308024249 23080242 朱浩 男 65 50 80 72 62 71 82
4 2308024219 23080242 封印 女 73 88 92 61 47 46 83
5 2308024201 23080242 迟培 男 60 50 89 71 76 71 82
6 2308024347 23080243 李华 女 67 61 84 61 65 78 83
7 2308024307 23080243 陈田 男 76 79 86 69 40 69 82
8 2308024326 23080243 余皓 男 66 67 85 65 61 71 95
9 2308024320 23080243 李嘉 女 62 60 90 60 67 77 95
10 2308024342 23080243 李上初 男 76 90 84 60 66 60 82
11 2308024310 23080243 郭窦 女 79 67 84 64 64 79 85
12 2308024435 23080244 姜毅涛 男 77 71 87 61 73 76 82
13 2308024432 23080244 赵宇 男 74 74 88 68 70 71 85
14 2308024446 23080244 周路 女 76 80 77 61 74 80 85
15 2308024421 23080244 林建祥 男 72 72 81 63 90 75 85
16 2308024433 23080244 李大强 男 79 76 77 78 70 70 89
17 2308024428 23080244 李侧通 男 64 96 91 69 60 77 83
18 2308024402 23080244 王慧 女 73 74 93 70 71 75 88
19 2308024422 23080244 李晓亮 男 85 60 85 72 72 83 89df3.groupby(by=['班级','性别'])['军训'].agg({'总分':numpy.sum,'人数': numpy.size,'平均>值':numpy.mean,'方差':numpy.var,'标准差':numpy.std,'最高分':numpy.max,'最低分':numpy.min})
总分 人数 平均值 方差 标准差 最高分 最低分
班级 性别
23080242 女 167 2 83.500000 144.500000 12.020815 92 75
男 321 4 80.250000 38.250000 6.184658 89 75
23080243 女 258 3 86.000000 12.000000 3.464102 90 84
男 255 3 85.000000 1.000000 1.000000 86 84
23080244 女 170 2 85.000000 128.000000 11.313708 93 77
男 509 6 84.833333 25.766667 5.076088 91 77
分组分析:是指根据分组字段将分析对象划分成不同的部分,以进行对比分析各组之间的差异性的一种分析方法。
常用的统计指标:计数、求和、平均值
常用形式:
df.groupby(by=['分类1','分类2',...])['被统计的列'].agg({列别名1:统计函数1,列别名2:统计函数2,…})
by 用于分组的列
[ ] 用于统计的列
.agg 统计别名显示统计值的名称,统计函数用于统计数据
size 计数
sum 求和
mean 均值
import numpy import pandas from pandas import read_excel df = read_excel('e:\\rz4.xlsx') df
Out[1]:
学号 班级 姓名 性别 英语 体育 军训 数分 高代 解几 计算机 总分
0 2308024241 23080242 成龙 男 76 78 77 40 23 60 89 443
1 2308024244 23080242 周怡 女 66 91 75 47 47 44 82 452
2 2308024251 23080242 张波 男 85 81 75 45 45 60 80 471
3 2308024249 23080242 朱浩 男 65 50 80 72 62 71 82 482
4 2308024219 23080242 封印 女 73 88 92 61 47 46 83 490
5 2308024201 23080242 迟培 男 60 50 89 71 76 71 82 499
6 2308024347 23080243 李华 女 67 61 84 61 65 78 83 499
7 2308024307 23080243 陈田 男 76 79 86 69 40 69 82 501
8 2308024326 23080243 余皓 男 66 67 85 65 61 71 95 510
9 2308024320 23080243 李嘉 女 62 60 90 60 67 77 95 511
10 2308024342 23080243 李上初 男 76 90 84 60 66 60 82 518
11 2308024310 23080243 郭窦 女 79 67 84 64 64 79 85 522
12 2308024435 23080244 姜毅涛 男 77 71 87 61 73 76 82 527
13 2308024432 23080244 赵宇 男 74 74 88 68 70 71 85 530
14 2308024446 23080244 周路 女 76 80 77 61 74 80 85 533
15 2308024421 23080244 林建祥 男 72 72 81 63 90 75 85 538
16 2308024433 23080244 李大强 男 79 76 77 78 70 70 89 539
17 2308024428 23080244 李侧通 男 64 96 91 69 60 77 83 540
18 2308024402 23080244 王慧 女 73 74 93 70 71 75 88 544
19 2308024422 23080244 李晓亮 男 85 60 85 72 72 83 89 546labels=['450及其以下','450到500','500及其以上'] #给三段数据贴标签 labels
Out[5]: [‘450及其以下’, ‘450到500’, ‘500及其以上’]
bins = [min(df.总分)-1,450,500,max(df.总分)+1] #将数据分成三段 bins
Out[3]: [442, 450, 500, 547]
总分分层 = pandas.cut(df.总分,bins,labels=labels) 总分分层
Out[7]:
0 450及其以下
1 450到500
2 450到500
3 450到500
4 450到500
5 450到500
6 450到500
7 500及其以上
8 500及其以上
9 500及其以上
10 500及其以上
11 500及其以上
12 500及其以上
13 500及其以上
14 500及其以上
15 500及其以上
16 500及其以上
17 500及其以上
18 500及其以上
19 500及其以上
Name: 总分, dtype: category
Categories (3, object): [450及其以下 < 450到500 < 500及其以上]df['总分分层']= 总分分层 df
Out8]:
学号 班级 姓名 性别 英语 体育 军训 数分 高代 解几 计算机基础 总分 总分分层
0 2308024241 23080242 成龙 男 76 78 77 40 23 60 89 443 450及其以下
1 2308024244 23080242 周怡 女 66 91 75 47 47 44 82 452 450到500
2 2308024251 23080242 张波 男 85 81 75 45 45 60 80 471 450到500
3 2308024249 23080242 朱浩 男 65 50 80 72 62 71 82 482 450到500
4 2308024219 23080242 封印 女 73 88 92 61 47 46 83 490 450到500
5 2308024201 23080242 迟培 男 60 50 89 71 76 71 82 499 450到500
6 2308024347 23080243 李华 女 67 61 84 61 65 78 83 499 450到500
7 2308024307 23080243 陈田 男 76 79 86 69 40 69 82 501 500及其以上
8 2308024326 23080243 余皓 男 66 67 85 65 61 71 95 510 500及其以上
9 2308024320 23080243 李嘉 女 62 60 90 60 67 77 95 511 500及其以上
10 2308024342 23080243 李上初 男 76 90 84 60 66 60 82 518 500及其以上
11 2308024310 23080243 郭窦 女 79 67 84 64 64 79 85 522 500及其以上
12 2308024435 23080244 姜毅涛 男 77 71 87 61 73 76 82 527 500及其以上
13 2308024432 23080244 赵宇 男 74 74 88 68 70 71 85 530 500及其以上
14 2308024446 23080244 周路 女 76 80 77 61 74 80 85 533 500及其以上
15 2308024421 23080244 林建祥 男 72 72 81 63 90 75 85 538 500及其以上
16 2308024433 23080244 李大强 男 79 76 77 78 70 70 89 539 500及其以上
17 2308024428 23080244 李侧通 男 64 96 91 69 60 77 83 540 500及其以上
18 2308024402 23080244 王慧 女 73 74 93 70 71 75 88 544 500及其以上
19 2308024422 23080244 李晓亮 男 85 60 85 72 72 83 89 546 500及其以上df.groupby(by=['总分分层'])['总分'].agg({'人数':numpy.size})
Out[9]:
人数
总分分层
450及其以下 1
450到500 6
500及其以上 13
交叉分析:通常用于分析两个或两个以上分组变量之间的关系,以交叉表形式进行变量间关系的对比分析。一般分为:定量、定量分组交叉;定量、定性分组交叉;定性、定性分组交叉。
pivot_table(values,index,columns,aggfunc,fill_value)
values 数据透视表中的值
index 数据透视表中的行
columns 数据透视表中的列
aggfunc 统计函数
fill_value NA值的统一替换
import numpy import pandas from pandas import read_excel from pandas import pivot_table #在spyder下也可以不导入 df = read_excel('e:\\rz4.xlsx') bins = [min(df.总分)-1,450,500,max(df.总分)+1] labels=['450及其以下','450到500','500及其以上'] 总分分层 = pandas.cut(df.总分,bins,labels=labels) df['总分分层']= 总分分层 df.pivot_table(values=['总分'],index=['总分分层’], columns=['性别'],aggfunc=[numpy.size,numpy.mean])
Out[1]:
size mean
总分 总分
性别 女 男 女 男
总分分层
450及其以下 NaN 1 NaN 443.000000
450到500 3 3 480.333333 484.000000
500及其以上 4 9 527.500000 527.666667df.pivot_table(values=['总分'],index=['总分分层’],columns=['性别'],aggfunc=[numpy.size,numpy.mean],fill_value=0) #也可以将统计为0的赋值为零,默认为nan。
Out[2]:
size mean
总分 总分
性别 女 男 女 男
总分分层
450及其以下 0 1 0.000000 443.000000
450到500 3 3 480.333333 484.000000
500及其以上 4 9 527.500000 527.666667s
结构分析:是在分组的基础上,计算各组成部分所占的比重,进而分析总体的内部特征的一种分析方法。
axis参数说明:0表示列;1表示行。
#假设要计算班级团体总分情况 import numpy import pandas from pandas import read_excel from pandas import pivot_table #在spyder下也可以不导入 df = read_excel('e:\\rz4.xlsx') df_pt = df.pivot_table(values=['总分’], index=['班级'],columns=['性别’], aggfunc=[numpy.sum]) df_pt
Out[1]:
sum
总分
性别 女 男
班级
23080242 942 1895
23080243 1532 1529
23080244 1077 3220df_pt.sum()
Out[3]:
性别
sum 总分 女 3551
男 6644
dtype: int64df_pt.div(df_pt.sum(axis=1),axis=0)#按列占比
Out[5]:
sum
总分
性别 女 男
班级
23080242 0.332041 0.667959
23080243 0.500490 0.499510
23080244 0.250640 0.749360df_pt.sum(axis=1)
Out[2]:
性别
sum 总分 女 3551
男 6644
dtype: int64df_pt.div(df_pt.sum(axis=0),axis=1)#按行占比
Out[6]:
sum
总分
性别 女 男
班级
23080242 0.265277 0.285220
23080243 0.431428 0.230132
23080244 0.303295 0.484648df_pt.sum(axis=0)#效果同省略
Out[4]:
班级
23080242 2837
23080243 3061
23080244 4297
dtype: int64
相关分析: 是研究现象之间是否存在某种依存关系,并对具体有依存关系的现象探讨其相关方向以及相关程度,是研究随机变量之间的相关关系的一种统计方法。
相关系数: 可以用来描述定量变量之间的关系
相关系数|r|取值范围 | 相关程度 |
---|---|
0<=|r|<0.3 | 低度相关 |
0.3<=|r|<0.8 | 中度相关 |
0.8<=|r|<=1 | 高度相关 |
相关分析函数:
DataFrame.corr()
Series.corr(other)
如果由数据框调用corr方法,那么将会计算每列两两之间的相似度。如果由序列调用corr方法,那么只是计算该序列与传入的序列之间的相关度。
返回值:
DataFrame调用 返回DataFrame
Series调用 返回一个数值型,大小为相关度
举例
#一维
df3.英语.corr(df3.高代)
Out[9]: -0.12524513810989527
df3.解几.corr(df3.高代)
Out[11]: 0.6132805268443008
#二维
df3.corr()
Out[13]:
学号 班级 英语 ... 解几 计算机基础 总分
学号 1.000000 0.982617 0.287492 ... 0.636150 0.211420 0.843040
班级 0.982617 1.000000 0.257248 ... 0.671301 0.251736 0.901960
英语 0.287492 0.257248 1.000000 ... 0.027452 -0.119039 0.167927
体育 0.130255 0.088482 0.244323 ... -0.526276 -0.266896 -0.067810
军训 0.124176 0.248652 -0.335015 ... 0.249299 0.148933 0.446614
数分 0.435493 0.517529 -0.129588 ... 0.544394 0.123399 0.732137
高代 0.602636 0.635006 -0.125245 ... 0.613281 0.096979 0.779466
解几 0.636150 0.671301 0.027452 ... 1.000000 0.305934 0.705506
计算机基础 0.211420 0.251736 -0.119039 ... 0.305934 1.000000 0.223004
总分 0.843040 0.901960 0.167927 ... 0.705506 0.223004 1.000000