pandas学习之综合练习

总结

1、任务1:
在这里插入图片描述①、首先我们解读题目:
需要模型名称、训练状态或推断状态、数值。状态是float, half, double三种,Training表示训练,Inference表示推断。
②读取数据

import pandas as pd 
import numpy as np
import io

df=pd.read_csv('benchmark.txt',sep='\r\t') # 我们发现分隔符是换行符

df.head(11)  # 查看数据

数据解读,从以下结果看出,我们要的数据是从第10行开始,发现一个规律,我们需要的数据模型名称、训练状态或推断状态,全部在偶数行;模型名称和值在奇数行。
在这里插入图片描述③、分离我们需要的数据。

df1=df.iloc[9::2,:]
df2=df.iloc[10::2,:]
df3=pd.DataFrame(df1.start.str.split(' ').to_list(),columns=['a','type_1','type_2','b','c','model_name'])
df4=pd.DataFrame(df2.start.str.split(' ').to_list(),columns=['model_name2','a','b','c','d','e','f','g','value','i'])

④、清洗数据,转换我们想要的内容。

df3['type_1'].replace('Training','Train',inplace=True)
df3['type']=df3['type_1']+'_'+df3['type_2']
df3=df3[['model_name','type']]
df4=df4[['model_name2','value']]
df5=pd.concat([df3,df4],axis=1)
del df5['model_name2']
df5=df5.iloc[:-1,:]
df5['value']=df5['value'].astype(float).round(3)

⑤、最后,转换为结果数据,我们使用drop_duplicates().shape判断出数据没有重复项,此时使用pivot转换结果。

df_result=pd.pivot(df5,index='model_name',columns='type',values='value').sort_index().reset_index()

结果如下:
在这里插入图片描述
2、任务2:
【任务五】水压站点的特征工程

df1和df2中分别给出了18年和19年各个站点的数据,其中列中的H0至H23分别代表当天0点至23点;df3中记录了18-19年的每日该地区的天气情况,请完成如下的任务:

import pandas as pd
import numpy as np
df1 = pd.read_csv(‘yali18.csv’)
df2 = pd.read_csv(‘yali19.csv’)
df3 = pd.read_csv(‘qx1819.csv’)

通过df1和df2构造df,把时间设为索引,第一列为站点编号,第二列为对应时刻的压力大小,排列方式如下(压力数值请用正确的值替换):

                   站点    压力

2018-01-01 00:00:00 1 1.0
2018-01-01 00:00:00 2 1.0
… … …
2018-01-01 00:00:00 30 1.0
2018-01-01 01:00:00 1 1.0
2018-01-01 01:00:00 2 1.0
… … …
2019-12-31 23:00:00 30 1.0

①、首先读取数据,使用isna().sum()和drop_duplicates().shape观察df1和df2是完整数据(无缺失也无重复数据)。接下来开干。

import pandas as pd
import numpy as np

df1 = pd.read_csv('yali18.csv')
df2 = pd.read_csv('yali19.csv')
df3 = pd.read_csv('qx1819.csv')

②、先把df1和df2两个表合并为一个表,接着按要求整理数据,具体操作步骤详见代码注释。

#合并数据
df_c=pd.concat([df1,df2])
# 提取站点数字
df_c['MeasName']=df_c.MeasName.str.extract(r'(\d+)').astype(int)
#宽表转长表处理
df=df_c.melt(id_vars=['Time','MeasName'],
            value_vars=df_c.columns[2:].tolist(),
            var_name='时间',
            value_name='压力')
# 修改列名
df.rename(columns={'MeasName':'站点'},inplace=True)
df['压力']=df['压力'].round(1)
# 提取小时
df['时间']=df.时间.str.extract(r'(\d+)')
#修改时间数据的数据类型
df['时间']=df['时间'].astype(str)
df['Time']=df['Time'].astype(str)
#拼接时间数据
df['Time']=df['Time']+' '+df['时间']+':00:00'
df['Time']=pd.to_datetime(df['Time'],format='%Y-%m-%d %H:%M:%S')

#删除不需要的列
del df['时间']

df.sort_values(['Time','站点'],ascending=True,inplace=True)
# 把时间列转为index
df.set_index('Time',inplace=True)
df.index.name=''
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值