文章目录
Pandas数据分析-结课作业
记录DataWhale的Pandas数据分析的学习过程,使用的教材为 joyful-pandas。
本次是最终测试,本篇文章中的测试题及源数据可以从此链接中下载,需要的童鞋可以点击链接自取。
显卡日志
思路:首先读取txt文件,文件读入后是字符串格式的,需要从字符串中提取出关键词,在字符数据那一节,讲过利用str.extract(正则表达式)提取出需要显示的信息。从原始的txt文件中可以看出,一个模型的数据是分两行写的,这样在利用正则提取信息的时候会带来麻烦,所以在使用str.extract()之前,需要将相邻的两行字符合并成一个字符,使用str.cat()即可达到这个目的。合并字符串以后,再用str.extract()即得包含关键信息的DataFrame。
得到DataFrame之后,观察DF可知,此时DF是一个长表,而题目要求得到一个宽表,所以下一步就是使用df.pivot()进行长宽表转换,至此可以得到答案。
import pandas as pd
import numpy as np
txt=pd.read_table('benchmark.txt',header=None)#header=None,首行不做列索引
txt=txt[10:-2].reset_index(drop=True)[0] #txt文件前几行有一些描述性信息,需要先剔除掉。
temp1=txt.loc[txt.index.values %2==0].reset_index(drop=True)# 偶数行
temp2=txt.loc[txt.index.values %2!=0].reset_index(drop=True)# 奇数行
x=temp1.str.cat(temp2,sep='-')#奇数行和偶数行拼接到一起
x=x.str.extract('Benchmarking \w+ (\w+) precision type (.+)-\w+ model average (.+) time : (\d+.\d+) ms') #用正则匹配关键信息
x=x.rename(columns={0:'precision',1:'model',2:'status',3:'time'})#对列索引重命名
x['temp']=x.status.str.capitalize().str.cat(x.precision,sep='_')#合并两列,方便后续变形。
x=x[['model','time','temp']]
x=x.pivot(index='model', columns='temp', values='time')#变形
结果: