头歌Python数据框序列定义及数据处理应用实验闯关
Posted Weikun Xing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了头歌Python数据框序列定义及数据处理应用实验闯关相关的知识,希望对你有一定的参考价值。
粘贴答案不是目的
把Python学会这才叫做意义
童年的纸飞机
现在终于飞回我手里~~
文章目录
- 第1关:序列和数据框
- 第2关:外部数据文件读取
- 第3关:逻辑索引、切片方法,groupby 分组计算函数应用
- 第4关:数据框关联操作
- 第5关:数据框合并操作
- 第6关:序列移动计算方法应用
- 第7关:数据框切片(iloc、loc)方法
- 第8关:数据框排序
- 第9关:数据框综合应用案例
- 第10关:序列及简单随机抽样
- 第11关:序列及较复杂抽样
第1关:序列和数据框
这是网站给的答案,不过运行报错,其他关卡应该没问题。
#********** Begin **********#
#完成以下任务
#1.导入pandas包
#2.定义列表L1、L2,元组T1、T2
#L1=[1,-2,2.3,'hq']
#L2=['kl','ht','as','km']
#T1=(1,8,8,9)
#T2=(2,4,7,'hp')
#3.构造数据框,默认索引,列名依次为a,b,c,d,返回计算结果A
#4.构造数据框,索引为a,b,c,d,列名为L1,L2,T1,T2,返回计算结果B
def return_values():
import pandas as pd
L1 = [1,-2,2.3,'hq']
L2 = ['kl','ht','as','km']
T1 = (1,8,8,9)
T2 = (2,4,7,'hp')
data = 'a':L1,'b':L2,'c':T1,'d':T2
A= pd.DataFrame(data) #默认索引,列名为a,b,c,d
t1 = pd.Series(L1,index = ['a','b','c','d'])
t2 = pd.Series(L2,index = ['a','b','c','d'])
t3 = pd.Series(T1,index = ['a','b','c','d'])
t4 = pd.Series(T2,index = ['a','b','c','d'])
t = 'L1':t1,'L2':t2,'T1':t3,'T2':t4
B = pd.DataFrame(t) #索引为a,b,c,d,列名为L1,L2,T1,T2
return(A,B)
#********** End **********#
第2关:外部数据文件读取
#********** Begin **********#
#1.导入pandas包
#2.read_excel()函数读取“一、车次上车人数统计表.xlsx”中的数据,用一个数据框df1来存储,并输出第0行
#3.通过read_table()函数可以读取"txt1.txt"文件中的数据(不带表头),用一个数据框df2来表示,并输出第0行
#4.通过read_csv()函数读取用分块读取的方式读取“data.csv”文件,每次读取20000行,并输出每次读取的数据集行数
#5.输出格式为“第n次读取数据规模为:20000 /n (20000, 行数)”
#在函数中编写程序
def return_values():
import pandas as pd
df1 = pd.read_excel('一、车次上车人数统计表.xlsx')
df2 = pd.read_table('txt1.txt',header=None)
reader = pd.read_csv('data.csv',chunksize=20000)
k=0;
names = locals()#设置全局变量
for i in reader:
k=k+1
names['A%s'%k]=pd.DataFrame(i)#创建A1~Ak个变量,分别保存各分块
print('第'+str(k)+'次读取数据规模为: ',len(i))
print(i.shape)
#********** End **********#
第3关:逻辑索引、切片方法,groupby 分组计算函数应用
#********** Begin **********#
#本关任务:
#请读取地铁站点进出站客流数据表(Data.xlsx),表结构字段如下:
# 站点编号、日期、时刻、进站人数、出站人数
#完成以下任务:
#1)取出第0列,通过去重的方式获得地铁站点编号列表,记为code
#2)采用数据框中的groupby分组计算函数,统计出每个地铁站点每天的进站人数和出站人数,
# 计算结果采用一个数据框sat_num来表示,其中列标签依次为:站点编号、日期、进站人数和出站人数;
#3)计算出每个站点国庆节期间(10.1~10.7)的进站人数和出站人数,
# 计算结果用一个数据框sat_num2来表示,其中列标签依次为:A1_站点编号、A2_进站人数、A3_出站人数。
def return_values():
import pandas as pd
A=pd.read_excel('Data.xlsx')
code=list(A['站点编号'].unique())
B=A.groupby(['站点编号','日期'])['进站人数','出站人数'].sum()
c=list(B.index)
A1=[]
A2=[]
for i in range(len(c)):
r=c[i]
A1.append(r[0])
A2.append(r[1])
sat_num=pd.DataFrame('A1_站点编号':A1,'A2_日期':A2,'A3_进站人数':B['进站人数'].values,
'A4_出站人数':B['出站人数'].values)
D=sat_num.iloc[sat_num['A2_日期'].values<='2015-10-07',:]
D1=D.groupby(['A1_站点编号'])['A3_进站人数','A4_出站人数'].sum()
sat_num2=pd.DataFrame('A1_站点编号':list(D1.index),
'A2_进站人数':D1['A3_进站人数'].values,'A3_出站人数':D1['A4_出站人数'].values)
return(code,sat_num,sat_num2)
#********** End **********#
第4关:数据框关联操作
#********** Begin **********#
def return_values():
#1.导入pandas包
import pandas as pd
#2.定义两个字典 dict1 和 dict2
dict1='code':['A01','A01','A01','A02','A02','A02','A03','A03'],
'month':['01','02','03','01','02','03','01','02'],
'price':[10,12,13,15,17,20,10,9]
dict2='code':['A01','A01','A01','A02','A02','A02'],
'month':['01','02','03','01','02','03'],
'vol':[10000,10110,20000,10002,12000,21000]
#3.将两个字典转化为数据框;
dict1 = pd.DataFrame(dict1)
dict2 = pd.DataFrame(dict2)
#4.对两个数据框完成内连接、左连接、右连接;
df_inner=pd.merge(dict1,dict2,how='inner',on=['code','month'])#内连接
df_left=pd.merge(dict1,dict2,how='left',on=['code','month']) #左连接
df_right=pd.merge(dict1,dict2,how='right',on=['code','month']) #右连接
return(df_inner,df_left,df_right)
#********** End **********#
第5关:数据框合并操作
#********** Begin **********#
def return_values():
import pandas as pd
import numpy as np
#1.定义三个字典dict1、dict2和dict3
dict1='a':[2,2,'kt',6],'b':[4,6,7,8],'c':[6,5,np.nan,6]
dict2='d':[8,9,10,11],'e':['p',16,10,8]
dict3='a':[1,2],'b':[2,3],'c':[3,4],'d':[4,5],'e':[5,6]
#2.将三个字典转化为数据框df1、df2、df3;
df1 = pd.DataFrame(dict1)
df2 = pd.DataFrame(dict2)
df3 = pd.DataFrame(dict3)
#3.df1和df2进行水平合并,合并后的数据框记为df4;
df4 = pd.concat([df1,df2],axis=1)
#4.df3和df4垂直合并,并修改合并后的index为按默认顺序排列,修改合并后的数据框记为df5
df5 = pd.concat([df3,df4],axis=0)
return(df4,df5)
#********** End **********#
第6关:序列移动计算方法应用
#********** Begin **********#
def return_values():
#1.导入pandas包
import pandas as pd
#2.定义列表L
L=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
#3.把列表L转化为序列S
S = pd.Series(L)
#4.针对S实现周期为10的移动求和、求平均值、求最大值、求最小值的计算
Sum = S.rolling(10).sum()
mean = S.rolling(10).mean()
max1 = S.rolling(10).max()
min1 = S.rolling(10).min()
return(L,S,Sum)
#********** End **********#
第7关:数据框切片(iloc、loc)方法
#********** Begin **********#
#1、导入pdndas包
#2、读取地铁站点进出站客流数据表(Data.xlsx),字段依次为:
# 站点编号、日期、时刻、进站人数、出站人数
#3、采用索引(iloc)实现的方式,获取135站点
# 10月1日-10月2日早上9-11点3个时刻的进站客流量数据(取所有字段),记为A
#4、采用列标签(loc)实现方式,获取135站点
# 10月1日-10月2日早上9-11点3个时刻的进站客流量数据(取所有字段),记为B。
def return_values():
import pandas as pd
#索引实现
read = pd.read_excel('Data.xlsx')
zhandian = read.iloc[read['站点编号'].values==135,:]
riqi = zhandian.iloc[zhandian['日期'].values<'2015-10-03',:]
shike = riqi.iloc[riqi['时刻'].values>=9,:]
shike1 = shike.iloc[shike['时刻'].values<=11,:]
A1 = read['站点编号'].values==135
A2 = read['日期'].values<'2015-10-03'
A3 = read['时刻'].values>=9
A4 = read['时刻'].values<=11
A = read.iloc[A1&A2&A3&A4,[0,1,2,3]]
read = pd.read_excel('Data.xlsx')
zhandian = read.loc[read['站点编号'].values==135,:]
riqi = zhandian.loc[zhandian['日期'].values<'2015-10-03',:]
shike = riqi.loc[riqi['时刻'].values>=9,:]
shike1 = shike.loc[shike['时刻'].values<=11,:]
A1 = read['站点编号'].values==135
A2 = read['日期'].values<'2015-10-03'
A3 = read['时刻'].values>=9
A4 = read['时刻'].values<=11
B = read.loc[A1&A2&A3&A4,:]
return(A,B)
#********** End **********#
第8关:数据框排序
#********** Begin **********#
#1.导入pandas包
#2.用read_excel()函数读取“data.xlsx"表,用数据框read表示
#3.提取600000.SH代码交易数据,并按交易日期从小到大进行排序,记为data
#4.对整个数据框read,按代码、交易日期从小到大进行排序
def return_values():
import pandas as pd
read = pd.read_excel('data.xlsx')
data = read.iloc[read['代码'].values=='600000.SH',:].sort_values('交易日期',axis=0)
da2 = read.sort_values(['代码','交易日期'])
return(data,da2)
#********** End **********#
第9关:数据框综合应用案例
#********** Begin **********#
#本关任务:
#读取地铁站点进出站客流数据表(Data.xlsx),统计计算获得每个站点每个时刻(除去国庆期间)的总进站客流量和总出站客流量,
#用一个数据框来R表示,结果返回R,列名依次为:A1_站点编号、A2_时刻、A3_总进站客流、A4_总出站客流
def return_values():
import pandas as pd
import numpy as np
#读取数据
df = pd.read_excel('Data.xlsx')
df=df.iloc[df['日期'].values>='2015-10-08',:]
station = df.iloc[:,0].unique()
time = df.iloc[:,2].unique()
A1 =[]
A2 =[]
A3 =[]
A4 =[]
for i in range(len(station)):
d1=df.iloc[df['站点编号'].values==station[i],:]
for j in range(len(time)):
sk = d1['时刻'].unique()
if time[j] in sk:
jz_sum = d1.iloc[d1['时刻'].values==time[j],3].sum()
cz_sum = d1.iloc[d1['时刻'].values==time[j],4].sum()
A1.append(station[i])
A2.append(time[j])
A3.append(jz_sum)
A4.append(cz_sum)
df0=pd.DataFrame('A1_站点编号':A1,'A2_时刻':A2,'A3_总进站客流':A3,'A4_总出站客流':A4)
df0.to_excel('各站点各时刻进出站客流数据.xlsx')
return(df0)
#********** End **********#
第10关:序列及简单随机抽样
#********** Begin **********#
#1.定义一个列表code,编号为1~30
#2.对code,按30个元素一次随机抽样,记为A
#3.返回结果,为序列s,其中index为编号,值为抽样结果
def return_values():
import random
import pandas as pd
code=list(range(1,31))
A=random.sample(code,30)
s=pd.Series(A,index=code)
return s
第11关:序列及较复杂抽样
#********** Begin **********#
def return_values():
#定义一个数据框A,index为默认序号(0~39),代表每一位同学
#数据框A的第0列表示每位同学随机抽签的第1种题型的序号,第1、2、3、4列依次类推
#知识点,考查random.randint(),随机整数的生成应用
import random
import pandas as pd
t1=[]
t2=[]
t3=[]
t4=[]
t5=[]
for i in range(40头歌实验五Python循环结构