谦比西检测数据提取 python编写笔记
对于没学过Python的我来说,上来就让我做任务实在有些无情。不过总算在拖拖拉拉了5天之后实现了功能,还换来了师兄的一句不错。挺开心的。
我要实现的功能是,将传感器监测数据记录表,整理成需要的格式,具体如下:

左边是原始表格,右图是经过处理后格式更加整齐的表格。
贴上源代码,然后记录一下在编程过程中遇到的问题和解决方法~
1 import pandas as pd 2 3 # 输入文件名,将读入的数据存入total变量中 4 filename = 'TThickener endency_2017_06_26_16_05_43.csv' 5 total = pd.read_csv('D:\\spydata\\'+filename).drop(' DateTo', axis=1) 6 7 # 设置对DataFrame切片的关键词,获取其所在行数 8 pen_number = ['Pen Number'] 9 breakpoint = total[total['Trend Name'].isin(pen_number)].index.tolist() 10 # 获取传感器的名字 11 pen_name = total[breakpoint[0]+1:breakpoint[1]][' Number of Curves'].reset_index(drop=True) 12 # 获取传感器采样的具体数据及采样时间 13 data = pd.DataFrame(total[breakpoint[1]+1:]) 14 # 初始化标题域head和数据域result 15 head = pd.DataFrame() 16 result = pd.DataFrame() 17 18 # 循环遍历每一个传感器,将数据调整成需要的格式 19 for i in range(0, (breakpoint[1]-1)-(breakpoint[0]+1)): 20 if pen_name[i] in ['NENIT11', 'PEPIT01', 'THICKENER01_SPEED', 'DEDIT01', 'DEDIT02', 'FEFIT01']: 21 head = head.append(pd.DataFrame(['Date'])).append(pd.DataFrame([pen_name[i]])).reset_index(drop=True) 22 # 把该传感器所有的数据及采样时刻存入datum,并追加到result中 23 datum = data[data['Trend Name'] == str(i)].reset_index(drop=True).T 24 result = result.append(datum) 25 26 # 将head和result写入csv文件中,新文件格式为“new-filename” 27 head.T.to_csv('D:\\spydata\\' + 'new-' + filename, index=False, header=False) 28 result.T.drop('Trend Name', axis=1).to_csv('D:\\spydata\\' + 'new-' + filename, index=False, header=False, mode='a') 29 30 print('The new file was built successfully!')
1、我读入csv文件之后,发现最后一列数据是自己不需要的,因而可以先删掉,减少数据量。怎么删除呢?用到pandas里面的drop()。值得注意的是,python默认axis=0,也就是默认以“行”为操作对象。对我来说,我要删除一列,那么我就需要设置axis属性为1。
total = pd.read_csv('D:\\spydata\\'+filename).drop(' DateTo', axis=1)
2、根据关键词,搜索哪些行里有这个关键词,返回行号。用到isin()
breakpoint = total[total['Trend Name'].isin(pen_number)].index.tolist()
3、我提取出某一列的数据时,它还会带着之前的索引,所以为了方便接下来的工作,需要重新进行索引。用到下面这个函数:
reset_index(drop=True)
4、我提取了两组数据到两个DataFrame里面,如何将它们拼接起来?拼到下面?拼到右面?我参考了这个博主写的帖子,很有帮助
http://blog.csdn.net/zutsoft/article/details/51498026
5、在我要循环遍历每一个传感器的时候,我的判断条件写的是 data[data['Trend Name'] == i],结果结果为空。为什么呢?因为此时i是int型数据,而查找的域里的数据时字符串,因而这个时候需要进行类型转换,也就是str(i),将i从int型变成字符串型。
6、将head和result输出到csv文件时,遇到了两个问题。第一个是,输出带索引,第二个是,每次输出会将前面的覆盖掉。解决这两个问题的方法是:将index和header设置成False,然后输出模式改为‘a'。
index=False, header=False, mode='a'

浙公网安备 33010602011771号