草庐IT

头歌Python数据框、序列定义及数据处理应用实验闯关

数据攻城小狮子 2025-04-16 原文

粘贴答案不是目的

把Python学会这才叫做意义

童年的纸飞机

现在终于飞回我手里~~

文章目录

第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):  
        t1.append(random.randint(1,70))  
        t2.append(random.randint(1,80))  
        t3.append(random.randint(1,50))  
        t4.append(random.randint(1,30))  
        t5.append(random.randint(1,20))  
    A=pd.DataFrame({'t1':t1,'t2':t2,'t3':t3,'t4':t4,'t5':t5})  
    return A    
#********** End **********#

有关头歌Python数据框、序列定义及数据处理应用实验闯关的更多相关文章

  1. ruby - Facter::Util::Uptime:Module 的未定义方法 get_uptime (NoMethodError) - 2

    我正在尝试设置一个puppet节点,但ruby​​gems似乎不正常。如果我通过它自己的二进制文件(/usr/lib/ruby/gems/1.8/gems/facter-1.5.8/bin/facter)在cli上运行facter,它工作正常,但如果我通过由ruby​​gems(/usr/bin/facter)安装的二进制文件,它抛出:/usr/lib/ruby/1.8/facter/uptime.rb:11:undefinedmethod`get_uptime'forFacter::Util::Uptime:Module(NoMethodError)from/usr/lib/ruby

  2. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  3. ruby - 将差异补丁应用于字符串/文件 - 2

    对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl

  4. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  5. ruby - 如何指定 Rack 处理程序 - 2

    Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

  6. ruby-on-rails - Rails 3.2.1 中 ActionMailer 中的未定义方法 'default_content_type=' - 2

    我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer

  7. ruby-on-rails - Rails 应用程序之间的通信 - 2

    我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此

  8. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  9. ruby-on-rails - Rails 应用程序中的 Rails : How are you using application_controller. rb 是新手吗? - 2

    刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr

  10. ruby-on-rails - form_for 中不在模型中的自定义字段 - 2

    我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢

随机推荐