正则大法好,脏数据,呵呵。

来源:互联网 发布:淘宝为什么关闭弘化社 编辑:程序博客网 时间:2024/05/22 07:05

先上个图:


恩,话说都写到一个单元格里了,前面是日期,后面括号里是数值型的,还有些带着单位,ok,lets do IT。

①我们要先把括号统一成字符‘s’和‘e’,我这里建议大家用excel自带的替换功能,中文半角模式下的‘(’也可以被一起替换掉。

②然后是套、吨、T、等单位清洗。

③空格要用excel中的替换或者trim函数去掉,用trim函数的时候要注意,它只能去掉一次中间的空格,如果有两个空格的话,就需要用两次trim,所以建议直接用替换比较好。

④接下来就可以上代码了,我讲编号字段起名叫code,待清洗字段起名out,输入文件名test,输出文件名output

import reimport pandas as pddiff=[]data=pd.read_excel(r'C:/Users/Administrator/Desktop/test.xlsx')df_total=pd.DataFrame({'x':[],'y':[],'z':[]})for c in range(len(data)):   x=re.findall('\d+[.]\d+[s]|\d+[s]',data['out'][c])   y=re.findall('[s]\d+[e]|[s]\d+[.]\d+[e]',data['out'][c])   if len(x)<>len(y):        diff.append(data['code'][c])        continue   else:       df=[]       D={'x':x,'y':y}       df=pd.DataFrame(D)       df['z']=data['code'][c]       df_total=pd.concat([df,df_total])df_total.to_excel('C:/Users/Administrator/Desktop/output.xlsx')

那么最后的结果就可以把原来一行里集中在一个单元格里的信息释放出来了!

12.10ss15eZ20141210-00111.3ss7eZ20141103-00111.10ss3eZ20141023-003释放出来之后要进行进一步加工,当然pandas里也有简单的时间序列操作,这里就不复述了,基本的思路就是正则表达式匹配,解析表达式遍历整个序列,将时间序列和括号内的数值解析出来,放入两个序列,再将两个序列合并成一个DataFrame,然后再加入主键列,最后用concat函数链接。

1 0
原创粉丝点击