#python语言

import pandas as pd
import time
data = pd.read_excel('ETL_数据清洗挑战.xlsx','测试数据',dtype=str)#读取数据
data_dict = data.to_dict(orient = 'dict')#将数据转换为字典
#print(data['CHECK_POINT']) listDate = []#创建列表并初始化
for cell in data_dict['CHECK_POINT'].values():#遍历字典当中keys='CHECK_POINT'的values
if(len(cell) == 11):#判定日期数据的格式是否统一
cell = str(cell)#将日期数据转化为字符串
cell = cell[:-1]#统一日期格式
date = time.strptime(str(cell),"%Y-%m-%d")#确定日期格式
date = time.strftime('%Y-%m-%d',date)#规定日期格式
else:
date = time.strptime(str(cell), "%Y-%m-%d")#确定日期格式
date = time.strftime('%Y-%m-%d',date)#规定日期格式
#print(date)
listDate.append(date)#将统一后的日期存入列表
data_dict['CHECK_POINT'] = listDate#更新数据字典
#print(listDate) id_list = {}#创建列表并初始化
index = 0#初始化索引为'0'
for id in data_dict['ID'].values():#遍历keys = 'ID'的values
#print(data_dict['ID'].values())
if id not in id_list.keys():#判断列表的keys值,
id_list[id] = []#初始化id_list
id_list[id].append(index)#将keys相等的index存入id_list中
index+=1#存入index后自增
#print(id_list)
day_dict = {}#创建字典
for i,j in id_list.items():#遍历id_list,i,j,分别存放keys和values
seq_no_list = [data_dict['SEQ_NO'][no] for no in j]#将keys相等的'SEQ_NO'分类存放
chect_point_list = [data_dict['CHECK_POINT'][no] for no in j]#将keys相等的'CHECK_POINT'分类存放
data_list = list(zip(seq_no_list,chect_point_list))#合并列表
#print(data_list)
for rows in range(len(data_list)-1,-1,-1):#因为要删除列表中的某些信息,避免遍历时数据超出边界,所以倒序遍历列表
df = data_list[rows]#变量df存放当前indexs的values
if(df[0] != '0034') and (df[0] != '0036') and (df[0] != '0048'):#判断values的值是否为需要判断的'0034'、'0036'、'0048'
data_list.remove(df)#使用remove()函数执行删除操作
#print(data_list)
for rows in range(len(data_list)-1,-1,-1):#因为要删除列表中的某些信息,避免遍历时数据超出边界,所以倒序遍历列表
df1 = data_list[rows]#变量df1存放当前index的values
df2 = data_list[rows - 1]#变量df2存放当前index.next的values
if(df1[0] == '0034') and (df2[0] == '0034'):#判断是否有重复的'SEQ_NO',重复时按照规则删掉相应的冗余值
data_list.remove(df1)#使用remove()函数执行删除操作
elif(df1[0] == '0036') and (df2[0] == '0036'):#同上
df3 = data_list[rows - 2]#使用remove()函数执行删除操作
#print(df3)
if(df3[0] == '0034'):#同上
data_list.remove(df2)#使用remove()函数执行删除操作
else:
data_list.remove(df1)#使用remove()函数执行删除操作
elif(df1[0] == '0048') and (df2[0] == '0048'):#同上
data_list.remove(df2)#使用remove()函数执行删除操作
day_dict[i] = data_list[0:]#将列表按照'ID'分类并存放到day_dict字典中
#print(data_list)
#print(day_dict) for keys,values in day_dict.items():#分别使用变量keys,values,来遍历day_dict
days = 0#初始化天数
for cell in range(len(values)-1,-1,-1):#倒序遍历values的values
if(values[cell][0] == '0048') and ((values[cell-1][0] == '0036') or (values[cell-1][0] == '0034')):#确定start_day和end_day的范围
start_day = int(str(values[cell-1][1])[8:])#将日期中的天数转化为int型并存放到start_day中
end_day = int(str(values[cell][1])[8:])#将日期中的天数转化为int型并存放到end_day中
if(end_day > start_day) and ((end_day - start_day) > 0):#判断日期的时间顺序是否正确
days += (end_day - start_day)#将日期的天数进行累加
elif(values[cell][0] == '0036') and (values[cell-1][0] == '0034'):#确定start_day和end_day的范围
start_day = int(str(values[cell-1][1])[8:])#将日期中的天数转化为int型并存放到start_day中
end_day = int(str(values[cell][1])[8:])#将日期中的天数转化为int型并存放到end_day中
if (end_day > start_day) and ((end_day - start_day) > 0):#判断日期的时间顺序是否正确
days += (end_day - start_day)#将日期的天数进行累加
days_dict = {keys:[str(days)+'days']}#将归类好的日期天数存放到days_dict字典中
print(days_dict)#输出字典中的数据

最新文章

  1. 关于F12的有效利用
  2. 【转】javascript运行机制之this详解
  3. 3.django笔记之form表单
  4. Eclipse插件安装与使用 —— Properties Editor
  5. Arrays, Hashtables and Dictionaries
  6. php连接mysql的一些方法总结
  7. Hibernate_10_继承的例子_单表
  8. Windows Server 2016-查询FSMO角色信息的三种方法
  9. 给小白看的KMP算法
  10. bzoj2091: [Poi2010]The Minima Game DP
  11. Python中的装饰器的简单介绍01
  12. vue路由的钩子函数和跳转
  13. MySQL 基础--字符类型
  14. Flex学习笔记-皮肤
  15. CSS3标签显示模式
  16. Mysql替换两个字段的内容(字符串)
  17. Overclock STM32F4 device up to 250MHz
  18. linux 下 php 安装 pthreads
  19. 程序媛计划——SQLite初级
  20. DNS_PROBE_FINISHED_NXDOMAIN 问题解决

热门文章

  1. 2019.01.19 bzoj4592: [Shoi2015]脑洞治疗仪(ODT)
  2. 2018.06.27 NOIP模拟 节目(支配树+可持久化线段树)
  3. 解决css3不支持同时缩放和旋转的办法
  4. Office2013 如何安装Matlab notebook
  5. Linux下启动tomcat报错RROR org.apache.catalina.core.StandardContext- Error starting static Resources java.lang.IllegalArgumentException: Document base /home/duiba/apache-tomcat/webapps/../webapps/manager do
  6. TinyMCE Editor
  7. Leetcod--20. Valid Parentheses(极简洁的括号匹配)
  8. HDU3572构造图的模型
  9. jQuery插件初级练习2
  10. centos rpm包下载地址