数据框、序列定义及数据处理应用

该博客主要围绕Python的Pandas库展开,包含多个数据处理任务的代码示例。如构造数据框、读取不同格式文件数据、分组计算、数据连接与合并、数据筛选与排序、移动计算、抽样等,展示了Pandas在数据处理方面的强大功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.

#********** 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.

#********** 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)        


 

    return(R)

       

       

#********** 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 **********#

mates!come on!ggs,ddu!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JS74110

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值