任务1:Pandas数据读取、保存和数据类型
任务要点:文件读取、保存、数据类型分析
- 步骤2:将读取的进行保存,表头也需要保存
- 步骤3:分析每列的类型,取值个数
- 步骤4:分析每列是否包含缺失值
代码如下
import pandas as pd
doc=pd.read_csv( 'E:\Pokemon.csv')
print(doc)
file=pd.DataFrame(doc)
file2=file.to_csv('csv文件.csv',header=True)
print(file.info())#分析每列的类型,取值个数
null_all=file.isnull().sum()#分析每列缺失值个数
print(null_all)#缺失值个数统计
print(file.isnull())#- 分析每列是否包含缺失值
任务2:Pandas数据位置索引
任务要点:数据选择、数据索引
- 步骤2:选择出Total列
- 步骤3:选择出Total列和HP列
- 步骤4:选择出第10-40行数据
- 步骤5:选择出第10-40行的Total列和HP列
-
import pandas as pd df=pd.read_csv('E:\Pokemon (1).csv') file=pd.DataFrame(df) file.to_csv('CSV文件2.csv') print(df[['Total']])#选择出total列 print(df[['Total','HP']])#选择出Total列和HP列 print(file.iloc[10:41,:])#选择出第10-40行数据 print(file.iloc[10:41,:],[['Total','HP']])#选择出第10-40行的Total列和HP列
-
任务3:Pandas数据逻辑索引
任务要点:逻辑索引
- 步骤1:读取文件https://cdn.coggle.club/Pokemon.csv
- 步骤2:筛选出Type 1 为 Grass的数据
- 步骤3:筛选出Type 1 为 Grass的数据 且 Type 2 为 Poison的数据
- 步骤4:筛选出HP大于50 或 Speed小于90的数据
- 步骤5:筛选出Type 1 取值为Grass 或 Fire,且 HP 位于 70 与 90之间,且 Speed以数字8开头的数据
-
import pandas as pd file=pd.read_csv('E:\Pokemon (2).csv')#读取CSV文件 df=pd.DataFrame(file) df2=df.set_index('Type 1')#设置列索引'Type 1' print(df2.loc['Grass'])#再运用loc索引器找出'Grass' df3=df2.set_index('Type 2',append=True)#多级索引 df2_sorted=df3.sort_index() print(df2_sorted.loc[('Grass','Poison')])#多级索引下查找 def condition(x):#筛选出HP大于50 或 Speed小于90的数据 a=x.HP>50 b=x.Speed<90 result=a&b return result print(df3.loc[condition]) df4=df.set_index(['Type 1']) df5=df4.loc[['Grass','Fire']] df4_sorted=df5.sort_index() def B(x):#筛选出Type 1 取值为Grass 或 Fire,且 HP 位于 70 与 90之间,且 Speed以数字8开头的数据 a=x.HP>70 b=x.HP<90 c=[str(d).startswith('8')for d in df4_sorted.Speed.values] result=a&b&c return result print(df4_sorted.loc[B])
-
任务4:Pandas数据分组聚合
任务要点:groupby、agg、transform
- 步骤1:读取文件https://cdn.coggle.club/Pokemon.csv
- 步骤2:学习groupby分组聚合的使用
- 步骤3:学习agg分组聚合的使用
- 步骤4:学习transform的使用
- 步骤5:使用groupby、agg、transform,统计数据在Type 1分组下 HP的均值
-
import pandas as pd file=pd.read_csv('E:\Pokemon (3).csv') print(file) file1=file.groupby('Type 1')['HP'] print(file1.agg({'HP':'mean'})) print(file1.transform('mean'))
-
任务5:Pandas日期数据处理
任务要点:日期处理
- 步骤1:创建一列dt,dt取值为从1638263656 到 1638283656 的 unix时间
- 步骤2:将dt列转为datatime格式
- 步骤3:筛选出dt列中小时为10的行
- 步骤4:将dt列整体增加8小时的时间
-
import pandas as pd import datetime import time timestamp_star=1638263656 timestamp_ends=1638283656 dt=pd.to_datetime(range(timestamp_star,timestamp_ends),unit='s')#时间戳转换为datetime类型 print(dt) print(dt[dt.hour==10])#筛选出dt列中小时为10的行 time.sleep(1.05) dt=dt+datetime.timedelta(hours=8)#将dt列整体增加8小时的时间 print(dt)
-
任务6:Pandas缺失值处理
- 步骤1:读取文件https://cdn.coggle.club/Pokemon.csv
- 步骤2:分析每列的缺失值
- 步骤3:对每列的缺失值进行填空
-
import pandas as pd file=pd.read_csv("E:\Pokemon (4).csv") df=pd.DataFrame(file) print(df.info())#可分析缺失值个数 df=df.fillna(value=0)#关键赋值 print(df.isna())#查看
-
任务7:Pandas数据可视化
任务要点:plot
- 步骤1:读取文件https://cdn.coggle.club/Pokemon.csv
- 步骤2:统计Type 1分组下HP、Attack、Defense的均值,并进行绘制柱状图
- 步骤3:将所有样本的HP、Attack绘制散点图
-
import pandas as pd import matplotlib as mpl #import matplotlib.pyplot as plt from matplotlib import pyplot as plt plt.rcParams['font.family'] = ['Source Han Sans CN'] file=pd.read_csv("E:\Pokemon (5).csv") df=pd.DataFrame(file) mean=df.groupby('Type 1')[['HP','Attack','Defense']].mean() #条形图 mean.plot(kind='bar',title='均值') plt.show() #散点图 data=df[['HP','Attack']] data.plot(kind='scatter',x='HP',y='Attack') plt.show()
任务8:Pandas多表合并和聚合
-
任务要点:merge、join
- 步骤1:创建如下数据
- 步骤2:Merge data1 and data2 Using Inner Join
- 步骤3:Merge data1 and data2 Using Outer Join
- 步骤4:Merge data1 and data2 Using Left Join
- 步骤5:Merge data1 and data2 Using Right Join
- 步骤6:Merge data1 ,data2 and data3 Using Outer Join
- 步骤7:Merge data1 and data2 based on Index
data1 = pd.DataFrame({"ID":range(101, 106),
"x1":range(1, 6),
"x2":["a", "b", "c", "d", "e"],
"x3":range(16, 11, - 1)})
data2 = pd.DataFrame({"ID":range(104, 108),
"y1":["x", "y", "x", "y"],
"y2":range(8, 1, - 2)})
data3 = pd.DataFrame({"ID":range(102, 110),
"z1":range(10, 18),
"z2":["z", "b", "z", "z", "d", "z", "d", "a"],
"z3":range(18, 10, - 1)})
import pandas as pd data1 = pd.DataFrame({"ID":range(101, 106), "x1":range(1, 6), "x2":["a", "b", "c", "d", "e"], "x3":range(16, 11, - 1)}) data2 = pd.DataFrame({"ID":range(104, 108), "y1":["x", "y", "x", "y"], "y2":range(8, 1, - 2)}) data3 = pd.DataFrame({"ID":range(102, 110), "z1":range(10, 18), "z2":["z", "b", "z", "z", "d", "z", "d", "a"], "z3":range(18, 10, - 1)}) print(data1) print(data2) print(data3) #inner内连接 data_inner=data1.merge(data2,how='inner') #outter外连接 data_outter=data1.merge(data2,how='outer') #left左连接 data_left=data1.merge(data2,how='left') #right右连接 data_right=data1.merge(data2,how='right') data_mult=data1.merge([data2,data3],how='outer') data_merge=data1.merge(data2,on='ID')
任务9:Pandas透视表和交叉表操作
- 步骤2:统计Type 1和Type 2分组下HP,Attack,Defense的均值
- 步骤3:统计Type 1为index,Type 2取值为不同列的情况下,Attack的均值
-
import pandas as pd file=pd.read_csv("E:\Pokemon.csv") file.groupby(['Type 1','Type 2'])['HP','Attack'].mean()
file.pivot_table(index='Type 1',columns='Type 2',values='Attack',aggfunc='mean')