Pandas用法大全-实战英超版

Python Pandas 用法总结

学习,从模仿开始,从练习开始,从自己熟悉喜欢的数据开始。

一、生成数据表

1. 引进 pandas

import pandas as pd
import numpy as np
import os
os.chdir('D:\\jupter notebook')

2.导入CSV或者xlsx文件:

# Data1 = pd.read_csv('Data1.xlsx.csv',header=0)
Data1 = pd.read_excel('2020-2021赛季英超第34轮积分.xlsx',sheet_name='积分')
Data1.head(6)
排名球队场次胜场平局负场进/失球积分
01曼城34255471/2480
12曼联331910464/3567
23莱斯特城34196961/3963
34切尔西341710753/3161
45热刺341681060/3856
56西汉姆331671053/4355

3、用pandas创建数据表:

Top6 = pd.DataFrame({"排名":[1,2,3,4,5,6], 
 "球队":['曼城', '曼联', '莱斯特城', '切尔西','热刺','西汉姆'],
 "场次":[34, 33, 34, 34,np.nan,33],
 "胜场":[25,19,19,17,16,16],
 "平局":[5,10,6,10,8,7],
  "负场":[4,4,9,7,10,10],
 "进/失球":['71/24','64/35','61/39','53/31','60/38','53/43'],
  "积分":[np.nan,67,63,61,56,55]},
  columns = ['排名', '球队', '场次', '胜场', '平局', '负场', '进/失球', '积分'])
Top6
排名球队场次胜场平局负场进/失球积分
01曼城34.0255471/24NaN
12曼联33.01910464/3567.0
23莱斯特城34.0196961/3963.0
34切尔西34.01710753/3161.0
45热刺NaN1681060/3856.0
56西汉姆33.01671053/4355.0

二、数据表信息查看

1、维度查看:

Data1.shape
(20, 8)

2、数据表基本信息(维度、列名称、数据格式、所占空间等):

Data1.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 20 entries, 0 to 19
Data columns (total 8 columns):
 #   Column  Non-Null Count  Dtype 
---  ------  --------------  ----- 
 0   排名      20 non-null     int64 
 1   球队      20 non-null     object
 2   场次      20 non-null     int64 
 3   胜场      20 non-null     int64 
 4   平局      20 non-null     int64 
 5   负场      20 non-null     int64 
 6   进/失球    20 non-null     object
 7   积分      20 non-null     int64 
dtypes: int64(6), object(2)
memory usage: 1.4+ KB

3、每一列数据的格式:

Data1.dtypes
排名       int64
球队      object
场次       int64
胜场       int64
平局       int64
负场       int64
进/失球    object
积分       int64
dtype: object

4、某一列格式:

Data1['积分'].dtype
dtype('int64')

5、空值:

Top6['积分'].isnull()
0     True
1    False
2    False
3    False
4    False
5    False
Name: 积分, dtype: bool

6、查看某一列的唯一值:

Top6['球队'].unique()
array(['曼城', '曼联', '莱斯特城', '切尔西', '热刺', '西汉姆'], dtype=object)

7、查看数据表的值:

Top6.isnull()
排名球队场次胜场平局负场进/失球积分
0FalseFalseFalseFalseFalseFalseFalseTrue
1FalseFalseFalseFalseFalseFalseFalseFalse
2FalseFalseFalseFalseFalseFalseFalseFalse
3FalseFalseFalseFalseFalseFalseFalseFalse
4FalseFalseTrueFalseFalseFalseFalseFalse
5FalseFalseFalseFalseFalseFalseFalseFalse
Top6.values
array([[1, '曼城', 34.0, 25, 5, 4, '71/24', nan],
       [2, '曼联', 33.0, 19, 10, 4, '64/35', 67.0],
       [3, '莱斯特城', 34.0, 19, 6, 9, '61/39', 63.0],
       [4, '切尔西', 34.0, 17, 10, 7, '53/31', 61.0],
       [5, '热刺', nan, 16, 8, 10, '60/38', 56.0],
       [6, '西汉姆', 33.0, 16, 7, 10, '53/43', 55.0]], dtype=object)

8、查看列名称:

Data1.columns
Index(['排名', '球队', '场次', '胜场', '平局', '负场', '进/失球', '积分'], dtype='object')

9、查看前5行数据、后5行数据:

Data1.head() #默认前5行数据
Data1.tail()    #默认后5行数据
Data1.head(3)
排名球队场次胜场平局负场进/失球积分
01曼城34255471/2480
12曼联331910464/3567
23莱斯特城34196961/3963

三、数据表清洗

1、用数字0填充空值:

Top6.fillna(value=0) #这显然不合理。
排名球队场次胜场平局负场进/失球积分
01曼城34.0255471/240.0
12曼联33.01910464/3567.0
23莱斯特城34.0196961/3963.0
34切尔西34.01710753/3161.0
45热刺0.01681060/3856.0
56西汉姆33.01671053/4355.0

2、通过胜负场计算对NA进行填充:

Top6['积分']=Top6['积分'].fillna(25*3+5*1)# 胜一场3分,平局1分,负场0分。
Top6['场次']=Top6['场次'].fillna(16+8+10)
Top6
排名球队场次胜场平局负场进/失球积分
01曼城34.0255471/2480.0
12曼联33.01910464/3567.0
23莱斯特城34.0196961/3963.0
34切尔西34.01710753/3161.0
45热刺34.01681060/3856.0
56西汉姆33.01671053/4355.0

3、更改数据格式:

Top6['积分'].astype ('int')     

0    80
1    67
2    63
3    61
4    56
5    55
Name: 积分, dtype: int32

4、更改列名称:

Top6.rename(columns={'排名': '积分排名'}) 
积分排名球队场次胜场平局负场进/失球积分
01曼城34.0255471/2480.0
12曼联33.01910464/3567.0
23莱斯特城34.0196961/3963.0
34切尔西34.01710753/3161.0
45热刺34.01681060/3856.0
56西汉姆33.01671053/4355.0

5、删除重复值(保留首次出现的值)

Top6['胜场'].drop_duplicates()

0    25
1    19
3    17
4    16
Name: 胜场, dtype: int64

6 、删除先出现的重复值:

Top6['胜场'].drop_duplicates(keep='last')

0    25
2    19
3    17
5    16
Name: 胜场, dtype: int64

7、数据替换:

Top6['球队'].replace(['曼城', '曼联', '莱斯特城', '切尔西','热刺','西汉姆'],['蓝月亮', '红魔', '蓝狐', '蓝军','白百合','铁锤帮'])

#s.replace(['?',r'$'],[np.nan,'NA'])#列表值替换
#s.replace({'?':np.nan,'$':'NA'})#字典映射

0    蓝月亮
1     红魔
2     蓝狐
3     蓝军
4    白百合
5    铁锤帮
Name: 球队, dtype: object

四、数据预处理

1、数据表合并

1.1 merge
Top6a=pd.DataFrame({'球队':['曼城', '曼联', '莱斯特城', '切尔西','热刺','西汉姆'], 
                  '绰号':['蓝月亮', '红魔', '蓝狐', '蓝军','白百合','铁锤帮'],
                  '主教练':['瓜迪奥拉','索尔斯克亚','罗杰斯','图赫尔','瑞安-梅森','莫耶斯']} )
Top6a
球队绰号主教练
0曼城蓝月亮瓜迪奥拉
1曼联红魔索尔斯克亚
2莱斯特城蓝狐罗杰斯
3切尔西蓝军图赫尔
4热刺白百合瑞安-梅森
5西汉姆铁锤帮莫耶斯
df_inner=pd.merge(Top6,Top6a,how='inner')  # 匹配合并,交集
df_left=pd.merge(Top6,Top6a,how='left')        #以左侧数据df3 index为合并后index
df_right=pd.merge(Top6,Top6a,how='right')   # #以右侧数据df4 index为合并后index
df_outer=pd.merge(Top6,Top6a,how='outer')  #并集
df_inner

排名球队场次胜场平局负场进/失球积分绰号主教练
01曼城34.0255471/2480.0蓝月亮瓜迪奥拉
12曼联33.01910464/3567.0红魔索尔斯克亚
23莱斯特城34.0196961/3963.0蓝狐罗杰斯
34切尔西34.01710753/3161.0蓝军图赫尔
45热刺34.01681060/3856.0白百合瑞安-梅森
56西汉姆33.01671053/4355.0铁锤帮莫耶斯
Data1.head(10)
排名球队场次胜场平局负场进/失球积分
01曼城34255471/2480
12曼联331910464/3567
23莱斯特城34196961/3963
34切尔西341710753/3161
45热刺341681060/3856
56西汉姆331671053/4355
67利物浦33159955/3954
78埃弗顿331571145/4252
89阿森纳341471346/3749
910阿斯顿维拉331461348/3848

1.2 append

LI=pd.DataFrame([7,'利物浦',33,15,9,9,'55/39',54]).T
LI.columns = ['排名', '球队', '场次', '胜场', '平局', '负场', '进/失球', '积分']
LI
排名球队场次胜场平局负场进/失球积分
07利物浦33159955/3954
Top7 = Top6.append(LI)
Top7
排名球队场次胜场平局负场进/失球积分
01曼城34.0255471/2480.0
12曼联33.01910464/3567.0
23莱斯特城34.0196961/3963.0
34切尔西34.01710753/3161.0
45热刺34.01681060/3856.0
56西汉姆33.01671053/4355.0
07利物浦33159955/3954

1.3 join

left = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'], 'B': ['B0', 'B1', 'B2', 'B3'],'key': ['K0', 'K1', 'K2', 'K3']})
right = pd.DataFrame({'C': ['C0', 'C1'],'D': ['D0', 'D1']},index=['K0', 'K1'])
left.join(right,on='key')
ABkeyCD
0A0B0K0C0D0
1A1B1K1C1D1
2A2B2K2NaNNaN
3A3B3K3NaNNaN

1.4 concat

pd.concat([Top6,LI])
排名球队场次胜场平局负场进/失球积分
01曼城34.0255471/2480.0
12曼联33.01910464/3567.0
23莱斯特城34.0196961/3963.0
34切尔西34.01710753/3161.0
45热刺34.01681060/3856.0
56西汉姆33.01671053/4355.0
07利物浦33159955/3954

2、设置索引列

Top7.set_index('排名')

球队场次胜场平局负场进/失球积分
排名
1曼城34.0255471/2480.0
2曼联33.01910464/3567.0
3莱斯特城34.0196961/3963.0
4切尔西34.01710753/3161.0
5热刺34.01681060/3856.0
6西汉姆33.01671053/4355.0
7利物浦33159955/3954

3、按照特定列的值排序:

Top7.sort_values(by=['平局'])
排名球队场次胜场平局负场进/失球积分
01曼城34.0255471/2480.0
23莱斯特城34.0196961/3963.0
56西汉姆33.01671053/4355.0
45热刺34.01681060/3856.0
07利物浦33159955/3954
12曼联33.01910464/3567.0
34切尔西34.01710753/3161.0

4、按照索引列排序:

Top7.sort_index(axis=1, ascending=False)

进/失球负场胜场积分球队排名平局场次
071/2442580.0曼城1534.0
164/3541967.0曼联21033.0
261/3991963.0莱斯特城3634.0
353/3171761.0切尔西41034.0
460/38101656.0热刺5834.0
553/43101655.0西汉姆6733.0
055/3991554利物浦7933

5.标记标签

Top7['欧冠区'] = np.where(Top7['排名']< 5,'是','否')
Top7
排名球队场次胜场平局负场进/失球积分欧冠区
01曼城34.0255471/2480.0
12曼联33.01910464/3567.0
23莱斯特城34.0196961/3963.0
34切尔西34.01710753/3161.0
45热刺34.01681060/3856.0
56西汉姆33.01671053/4355.0
07利物浦33159955/3954

6、对复合多个条件的数据进行分组标记

Top7.loc[(Top7['欧冠区'] == '否') & (Top7['排名'] >=4), '争四球队']='是'
Top7=Top7.fillna('否')
Top7
排名球队场次胜场平局负场进/失球积分欧冠区争四球队
01曼城34.0255471/2480.0
12曼联33.01910464/3567.0
23莱斯特城34.0196961/3963.0
34切尔西34.01710753/3161.0
45热刺34.01681060/3856.0
56西汉姆33.01671053/4355.0
07利物浦33.0159955/3954.0

五、数据提取

主要用到的三个函数:loc,iloc和ix,loc函数按标签值进行提取,iloc按位置进行提取,ix可以同时按标签和位置进行提取。

1、按索引提取单行的数值

Top7.loc[3]
排名          4
球队        切尔西
场次       34.0
胜场         17
平局         10
负场          7
进/失球    53/31
积分       61.0
欧冠区         是
争四球队        否
Name: 3, dtype: object

2、按索引提取区域行数值

Top7.iloc[0:4]

排名球队场次胜场平局负场进/失球积分欧冠区争四球队
01曼城34.0255471/2480.0
12曼联33.01910464/3567.0
23莱斯特城34.0196961/3963.0
34切尔西34.01710753/3161.0

3、重设索引

Top7.reset_index()
TOP7=Top7.set_index('球队')
TOP7
排名场次胜场平局负场进/失球积分欧冠区争四球队
球队
曼城134.0255471/2480.0
曼联233.01910464/3567.0
莱斯特城334.0196961/3963.0
切尔西434.01710753/3161.0
热刺534.01681060/3856.0
西汉姆633.01671053/4355.0
利物浦733.0159955/3954.0

4、在"球队’索引中提取指定的所有数据

TOP7[:'切尔西']
排名场次胜场平局负场进/失球积分欧冠区争四球队
球队
曼城134.0255471/2480.0
曼联233.01910464/3567.0
莱斯特城334.0196961/3963.0
切尔西434.01710753/3161.0
TOP7.loc['切尔西']
排名          4
场次       34.0
胜场         17
平局         10
负场          7
进/失球    53/31
积分       61.0
欧冠区         是
争四球队        否
Name: 切尔西, dtype: object

5、使用iloc按位置区域提取数据

TOP7.iloc[:3,:7] #冒号前后的数字不再是索引的标签名称,而是数据所在的位置。
排名场次胜场平局负场进/失球积分
球队
曼城134.0255471/2480.0
曼联233.01910464/3567.0
莱斯特城334.0196961/3963.0

6、适应iloc按位置单独提起数据

TOP7.iloc[[1,4,6],[0,6]] #提取第0、2、5行,2、4列
排名积分
球队
曼联267.0
热刺556.0
利物浦754

7、判断‘欧冠’列的值

TOP7['欧冠区'].isin(['是'])
球队
曼城       True
曼联       True
莱斯特城     True
切尔西      True
热刺      False
西汉姆     False
利物浦     False
Name: 欧冠区, dtype: bool

8、判断球队列里是否包含曼联和利物浦,然后将符合条件的数据提取出来

Top7.loc[Top7['球队'].isin(['曼联','利物浦'])] 
排名球队场次胜场平局负场进/失球积分欧冠区争四球队
12曼联33.01910464/3567.0
07利物浦33.0159955/3954.0

9、提取进/失球列名字符,并生成数据表

#pd.DataFrame(Top7['进/失球'].str[:2])
TOP7['进/失球'].str.split('/',expand=True)
TOP7['进/失球'].str.split('/',expand=True)[0] #取进球数
TOP7['进/失球'].str.split('/',expand=True)[1] #取失球数

01
球队
曼城7124
曼联6435
莱斯特城6139
切尔西5331
热刺6038
西汉姆5343
利物浦5539

六、数据筛选

使用与、或、非三个条件配合大于、小于、等于对数据进行筛选,并进行计数和求和。

1、使用“与”进行筛选

Top7.loc[(Top7['场次'] > 33) & (Top7['欧冠区'] == '是'), ['球队','积分','欧冠区','排名']]
球队积分欧冠区排名
0曼城80.01
2莱斯特城63.03
3切尔西61.04

2、使用“或”进行筛选

TOP7.loc[(TOP7['场次'] > 34) | (TOP7['欧冠区'] == '是')]
排名场次胜场平局负场进/失球积分欧冠区争四球队
球队
曼城134.0255471/2480.0
曼联233.01910464/3567.0
莱斯特城334.0196961/3963.0
切尔西434.01710753/3161.0
TOP7.loc[(TOP7['场次'] > 33) | (TOP7['欧冠区'] == '是'),['积分','欧冠区','排名']]
积分欧冠区排名
球队
曼城80.01
曼联67.02
莱斯特城63.03
切尔西61.04
热刺56.05

3、使用“非”条件进行筛选

TOP7.loc[(TOP7['欧冠区'] != '是'),['积分','争四球队','排名']]
积分争四球队排名
球队
热刺56.05
西汉姆55.06
利物浦54.07

4、对筛选后的数据按客单价列进行排序以及计数

TOP7.loc[(TOP7['场次'] == 34),['积分','排名']].sort_values(by=['积分'])
积分排名
球队
热刺56.05
切尔西61.04
莱斯特城63.03
曼城80.01

5、对筛选后的结果按客单价进行平均值

TOP7.loc[(TOP7['欧冠区'] == '是')].积分.mean()
67.75

七、数据汇总

主要函数是groupby和pivote_table

1、对所有的列进行计数汇总

# df3.groupby('城市').count()
TOP7.groupby('欧冠区').积分.sum()
TOP7.groupby('欧冠区').sum()
排名场次胜场平局负场积分
欧冠区
18100.0472429165.0
10135.0803124271.0

2、按欧冠区对胜场字段进行求和

Top7.groupby('欧冠区')['胜场'].sum()

欧冠区
否    47
是    80
Name: 胜场, dtype: int64

3、对两个字段进行汇总计数

pd.DataFrame(Top7.groupby(['欧冠区','球队'])['胜场'].sum())  # pd.DataFrame() 将数据转化为DataFrame格式
胜场
欧冠区球队
利物浦15
热刺16
西汉姆16
切尔西17
曼城25
曼联19
莱斯特城19

4、pivot_table对字段进行汇总

pd.pivot_table(Top7,index=["欧冠区"])
pd.pivot_table(Top7,index=["欧冠区",'场次'])
pd.pivot_table(Top7,index=["争四球队",'场次'])
平局排名积分胜场负场
争四球队场次
33.0102.00000067.019.0000004.000000
34.072.66666768.020.3333336.666667
33.086.50000054.515.5000009.500000
34.085.00000056.016.00000010.000000
pd.pivot_table(Top7,index=["欧冠区"],values=['积分']) #欧冠区与非欧冠区球队 积分平均值
pd.pivot_table(Top7,index=["欧冠区",'场次'],values=['积分'])#欧冠区与非欧冠区球队在不同场次下积分平均值
pd.pivot_table(Top7,index=["欧冠区",'场次'],values=['积分'],aggfunc=np.sum) #欧冠区与非欧冠区球队在不同场次下积分总和

积分
欧冠区场次
33.0109.0
34.056.0
33.067.0
34.0204.0
pd.pivot_table(Top7,index=["欧冠区"],values=['积分'],columns=["场次"],aggfunc=[np.sum])                     
sum
积分
场次33.034.0
欧冠区
109.056.0
67.0204.0

八、数据统计

数据采样,计算标准差,协方差和相关系数

1、简单随机数据采样

Top7.sample(n=3) 
排名球队场次胜场平局负场进/失球积分欧冠区争四球队
56西汉姆33.01671053/4355.0
07利物浦33.0159955/3954.0
01曼城34.0255471/2480.0

2、手动设置采样权重

weights = [0,0.2,0, 0, 0, 0.3, 0.5]
Top7.sample(n=3, weights=weights) 
排名球队场次胜场平局负场进/失球积分欧冠区争四球队
56西汉姆33.01671053/4355.0
12曼联33.01910464/3567.0
07利物浦33.0159955/3954.0

3、采样后不放回,不重复取样

Top7.sample(n=6, replace=False) 
排名球队场次胜场平局负场进/失球积分欧冠区争四球队
12曼联33.01910464/3567.0
56西汉姆33.01671053/4355.0
01曼城34.0255471/2480.0
07利物浦33.0159955/3954.0
34切尔西34.01710753/3161.0
23莱斯特城34.0196961/3963.0

4、采样后放回

可重复取样

Top7.sample(n=6, replace=True)
排名球队场次胜场平局负场进/失球积分欧冠区争四球队
56西汉姆33.01671053/4355.0
34切尔西34.01710753/3161.0
23莱斯特城34.0196961/3963.0
07利物浦33.0159955/3954.0
01曼城34.0255471/2480.0
34切尔西34.01710753/3161.0

5、 数据表描述性统计

Top7.describe().round(2).T #round函数设置显示小数位,T表示转置
countmeanstdmin25%50%75%max
排名7.04.002.161.02.54.05.57.0
场次7.033.570.5333.033.034.034.034.0
胜场7.018.143.3915.016.017.019.025.0
平局7.07.861.955.06.58.09.510.0
负场7.07.572.644.05.59.09.510.0
积分7.062.299.1254.055.561.065.080.0

6、计算列的标准差

Top7['胜场'].std()

3.387652649872841

7、计算两个字段间的协方差

Top7['胜场'].cov(Top7['积分']) 

30.452380952380953

8、数据表中所有字段间的协方差

Top7.cov()
排名场次胜场平局负场积分
排名4.666667-0.500000-6.5000001.3333334.666667-18.166667
场次-0.5000000.2857140.738095-0.404762-0.0476191.809524
胜场-6.5000000.73809511.476190-3.976190-6.76190530.452381
平局1.333333-0.404762-3.9761903.809524-0.238095-8.119048
负场4.666667-0.047619-6.761905-0.2380956.952381-20.523810
积分-18.1666671.80952430.452381-8.119048-20.52381083.238095

9、两个字段的相关性分析

Top7['场次'].corr(top['积分']) #相关系数在-1到1之间,接近1为正相关,接近-1为负相关,0为不相关
0.985284

10、数据表的相关性分析

Top7.corr()
排名场次胜场平局负场积分
排名1.000000-0.433013-0.8882010.3162280.819288-0.921745
场次-0.4330131.0000000.407613-0.387970-0.0337870.371054
胜场-0.8882010.4076131.000000-0.601358-0.7570130.985284
平局0.316228-0.387970-0.6013581.000000-0.046265-0.455941
负场0.819288-0.033787-0.757013-0.0462651.000000-0.853159
积分-0.9217450.3710540.985284-0.455941-0.8531591.000000

九、数据输出

分析后的数据可以输出为xlsx格式和csv格式

1、写入Excel

Top7.to_excel('Top7excel_to_python.xlsx', sheet_name='Top7') 

2、写入到CSV

Top7.to_csv('Top7excel_to_python.csv') 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值