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

先上个图:


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

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

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

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

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

import re
import pandas as pd
diff=[]
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-001
11.3ss7eZ20141103-001
11.10ss3eZ20141023-003
释放出来之后要进行进一步加工,当然pandas里也有简单的时间序列操作,这里就不复述了,基本的思路就是正则表达式匹配,解析表达式遍历整个序列,将时间序列和括号内的数值解析出来,放入两个序列,再将两个序列合并成一个DataFrame,然后再加入主键列,最后用concat函数链接。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值