一.数据集
https://www.gairuo.com/file/data/dataset/team.xlsx
读取数据
#读取数据
df = pd.read_excel('https://www.gairuo.com/file/data/dataset/team.xlsx')
#或df = pd.read_excel('team.xlsx')
print(df)
name team Q1 Q2 Q3 Q4
0 Liver E 89 21 24 64
1 Arry C 36 37 37 57
2 Ack A 57 60 18 84
3 Eorge C 93 96 71 78
4 Oah D 65 49 61 86
.. ... ... .. .. .. ..
95 Gabriel C 48 59 87 74
96 Austin7 C 21 31 30 43
自动增加了第一列,为数据增加的索引
二.查看数据
print('head():',df.head())#前5条
print('head(10)',df.head(10))#前10条
print('tail()',df.tail())#后5条,括号可以写明想看的条数
print('sample()',df.sample())#随机1条,括号可以写明想看的条数
head(): name team Q1 Q2 Q3 Q4
0 Liver E 89 21 24 64
1 Arry C 36 37 37 57
2 Ack A 57 60 18 84
3 Eorge C 93 96 71 78
4 Oah D 65 49 61 86
head(10) name team Q1 Q2 Q3 Q4
0 Liver E 89 21 24 64
1 Arry C 36 37 37 57
2 Ack A 57 60 18 84
3 Eorge C 93 96 71 78
4 Oah D 65 49 61 86
5 Harlie C 24 13 87 43
6 Acob B 61 95 94 8
7 Lfie A 9 10 99 37
8 Reddie D 64 93 57 72
9 Oscar A 77 9 26 67
tail() name team Q1 Q2 Q3 Q4
95 Gabriel C 48 59 87 74
96 Austin7 C 21 31 30 43
97 Lincoln4 C 98 93 1 20
98 Eli E 11 74 58 91
99 Ben E 21 43 41 74
sample() name team Q1 Q2 Q3 Q4
35 Samuel B 9 38 88 66
三. 验证数据
print('df.shape',df.shape)#(100, 6)行数和列数
print('df.describe()',df.describe())
'''
count 100.000000 100.000000 100.000000 100.000000 总数
mean 49.200000 52.550000 52.670000 52.780000 平均数
std 29.962603 29.845181 26.543677 27.818524 标准差
min 1.000000 1.000000 1.000000 2.000000 最小值
25% 19.500000 26.750000 29.500000 29.500000 四分位数
50% 51.500000 49.500000 55.000000 53.000000 四分位数
75% 74.250000 77.750000 76.250000 75.250000 四分位数
max 98.000000 99.000000 99.000000 99.000000 最大值
'''
四.建立索引
df.set_index('name',inplace=True)#name作为索引
print(df)
'''
team Q1 Q2 Q3 Q4
name
Liver E 89 21 24 64
Arry C 36 37 37 57
Ack A 57 60 18 84
Eorge C 93 96 71 78
Oah D 65 49 61 86
... ... .. .. .. ..
Gabriel C 48 59 87 74
Austin7 C 21 31 30 43
Lincoln4 C 98 93 1 20
Eli E 11 74 58 91
Ben E 21 43 41 74
[100 rows x 5 columns]
'''
五.数据选取
1. 选择列
print(df.Q1)#df['Q1']
'''
name
Liver 89
Arry 36
Ack 57
Eorge 93
Oah 65
..
Gabriel 48
Austin7 21
Lincoln4 98
Eli 11
Ben 21
Name: Q1, Length: 100, dtype: int64
'''
print(df.loc[:,['team','Q1']])#df[['team','Q1']].自然索引用df.iloc[]
'''
team Q1
name
Liver E 89
Arry C 36
Ack A 57
Eorge C 93
Oah D 65
... ... ..
Gabriel C 48
Austin7 C 21
Lincoln4 C 98
Eli E 11
Ben E 21
[100 rows x 2 columns]
2.选择行
print(df[df.index == 'Liver'])
'''
name
Liver E 89 21 24 64
'''
#自然索引,类似列表切片
print(df[0:3])#前三行
'''
team Q1 Q2 Q3 Q4
name
Liver E 89 21 24 64
Arry C 36 37 37 57
Ack A 57 60 18 84
'''
print(df[0:10:2])#前10行,步长2.取0,2,4,6,8
'''
team Q1 Q2 Q3 Q4
name
Liver E 89 21 24 64
Ack A 57 60 18 84
Oah D 65 49 61 86
Acob B 61 95 94 8
Reddie D 64 93 57 72
'''
print(df.iloc[:10,:])#前10个
'''
team Q1 Q2 Q3 Q4
name
Liver E 89 21 24 64
Arry C 36 37 37 57
Ack A 57 60 18 84
Eorge C 93 96 71 78
Oah D 65 49 61 86
Harlie C 24 13 87 43
Acob B 61 95 94 8
Lfie A 9 10 99 37
Reddie D 64 93 57 72
Oscar A 77 9 26 67
'''
3.指定行和列
print(df.loc['Eorge':'Lfie','Q1':'Q4'])
'''
Q1 Q2 Q3 Q4
name
Eorge 93 96 71 78
Oah 65 49 61 86
Harlie 24 13 87 43
Acob 61 95 94 8
Lfie 9 10 99 37
'''
print(df.iloc[0:5,:])#前5行
'''
name
Liver E 89 21 24 64
Arry C 36 37 37 57
Ack A 57 60 18 84
Eorge C 93 96 71 78
Oah D 65 49 61 86
'''
4.一定条件显示数据
print(
df[
(df['team'] == 'C')&
(df.Q1>90)
]
)
'''
team Q1 Q2 Q3 Q4
name
Eorge C 93 96 71 78
Alexander C 91 76 26 79
Lincoln4
六.排序
print(df.sort_values(by='Q1'))#Q1升序
print(df.sort_values(['team','Q1'],ascending=[True,False]))#team升序,Q1降序.先team后Q1
七.分组聚合
print(df.groupby('team').sum())#求和
'''
Q1 Q2 Q3 Q4
team
A 1066 639 875 783
B 975 1218 1202 1136
C 1056 1194 1068 1127
D 860 1191 1241 1199
E 963 1013 881 1033
'''
print(df.groupby('team').mean())#平均
'''
Q1 Q2 Q3 Q4
team
A 62.705882 37.588235 51.470588 46.058824
B 44.318182 55.363636 54.636364 51.636364
C 48.000000 54.272727 48.545455 51.227273
D 45.263158 62.684211 65.315789 63.105263
E 48.150000 50.650000 44.050000 51.650000
'''
print(df.groupby('team').agg(
{
'Q1':sum,
'Q2':'count',#总数
'Q3':'mean',
'Q4':max
}
))
'''
Q1 Q2 Q3 Q4
team
A 1066 17 51.470588 97
B 975 22 54.636364 99
C 1056 22 48.545455 98
D 860 19 65.315789 99
E 963 20 44.050000 98
'''
八.数据转换
print(df.groupby('team').sum().T)
'''
team A B C D E
Q1 1066 975 1056 860 963
Q2 639 1218 1194 1191 1013
Q3 875 1202 1068 1241 881
Q4 783 1136 1127 1199 1033
'''
print(df.groupby('team').sum().stack())
'''
team
A Q1 1066
Q2 639
Q3 875
Q4 783
B Q1 975
Q2 1218
Q3 1202
Q4 1136
C Q1 1056
Q2 1194
Q3 1068
Q4 1127
D Q1 860
Q2 1191
Q3 1241
Q4 1199
E Q1 963
Q2 1013
Q3 881
Q4 1033
dtype: int64
'''
print(df.groupby('team').sum().unstack())
'''
team
Q1 A 1066
B 975
C 1056
D 860
E 963
Q2 A 639
B 1218
C 1194
D 1191
E 1013
Q3 A 875
B 1202
C 1068
D 1241
E 881
Q4 A 783
B 1136
C 1127
D 1199
E 1033
dtype: int64
'''
八.增加列
df['one'] = 1#增加一个固定值的列
df['total'] = df.Q1 + df.Q2 + df.Q3 + df.Q4#总和列
'''
或
df['total'] = df.loc[:,'Q1':'Q4'].apply(
lambda x:sum(x),
axis = 1#axis=1以后就是将一个矩阵的每一列向量相加
)
'''
print(df.head())
'''
team Q1 Q2 Q3 Q4 one total
name
Liver E 89 21 24 64 1 198
Arry C 36 37 37 57 1 167
Ack A 57 60 18 84 1 219
Eorge C 93 96 71 78 1 338
Oah D 65 49 61 86 1 261
'''
df['total'] = df.sum(axis=1)#所有数值列相加
print(df.head())
'''
team Q1 Q2 Q3 Q4 one total
name
Liver E 89 21 24 64 1 397
Arry C 36 37 37 57 1 335
Ack A 57 60 18 84 1 439
Eorge C 93 96 71 78 1 677
Oah D 65 49 61 86 1 523
'''
九.统计分析
print(df.mean())#所有列的均值
'''
Q1 49.20
Q2 52.55
Q3 52.67
Q4 52.78
'''
#df.mean(axis=1)所有行的均值,下同
print(df.corr())#列与列之间的相关系数
'''
Q1 Q2 Q3 Q4
Q1 1.000000 0.142088 -0.125436 -0.010781
Q2 0.142088 1.000000 0.056270 -0.033213
Q3 -0.125436 0.056270 1.000000 0.041418
Q4 -0.010781 -0.033213 0.041418 1.000000
'''
print(df.count())#返回每一列中非空值的个数
'''
team 100
Q1 100
Q2 100
Q3 100
Q4 100
'''
'''
df.max()每一列最大值
df.min()每一列最小值
df.median()每一列中位数
df.std()每一列标准差
df.var()每一列方差
df.mode()每一列众数
'''
十.绘图
df['Q1'].plot()#Q1成绩的折线分布
plt.show()
df.loc['Ben','Q1':'Q4'].plot()
plt.show()
df.loc['Ben','Q1':'Q4'].plot.bar()#柱形图
plt.show()
df.loc['Ben', 'Q1':'Q4'].plot.barh()#横向柱形图
plt.show()
df.groupby('team').sum().T.plot()#数据聚合计算后,绘制多条折线图
plt.show()
df.groupby('team').count().Q1.plot.pie() # 数据聚合计算后,绘制饼图
plt.show()
十一.导出
df.to_excel('team-done.xlsx')