该程序从各自的列表中提取两个输出,并形成一个字典,找到相应的一对on和另一对off DateTime,并将其存储到df中。但是,在列表为空之前,它不会循环。你知道吗
这是我当前的代码:
import random, pandas as pd
from collections import defaultdict
import difflib
olist = []
storedListOn = []
storedListOff =[]
storedListDevice = []
storedListAppliance = []
storeListCategory = []
knnoutputlist = []
ldate = []
label = ['Light1_ON','Light2_ON','Fan1P3_ON','Light1_OFF','Heater1_ON','Fan1P3_OFF','Light2_OFF','Heater1_OFF','Light3_ON']
date = ['2019-10-28 09:11:23','2019-10-28 10:15:12','2019-10-28 12:23:52','2019-10-28 15:11:23','2019-10-28 18:30:20','2019-10-28 20:12:32','2019-10-28 22:00:23','2019-10-28 22:11:12','2019-10-29 05:12:23']
device = '8655'
for i in label:
knnoutputlist.append(i)
knnlist = knnoutputlist[:]
print(knnlist,'check 1')
for j in date:
ldate.append(j)
labeldate = ldate[:]
print(labeldate,'check 2')
outputList = {i:j for i,j in zip(knnlist,labeldate)}
print (str(outputList),'check 3')
if(len(list(outputList)) > 1):
for i in list(outputList):
i == list(outputList)[0]
print(i)
skeys = difflib.get_close_matches(i, outputList, n=2, cutoff=0.75)
if(len(skeys) < 2):
continue
if 'ON' in (skeys[0] and skeys[1]):
print("Retrieve Error",'9')
elif 'OFF' in skeys[0]:
print("Retrieve Error 2",'10')
else:
for key, val in outputList.items():
if skeys[0] in key:
storedListOn.append(val)
if skeys[1] in key:
storedListOff.append(val)
[outputList.pop(key) for key in skeys]
klist1 = skeys[0].split("_",1)
klist2 = skeys[1].split("_",1)
ak1 = klist1[0]
sk1 = klist1[1]
ak2 = klist2[0]
sk2 = klist2[1]
storedListDevice.append(device)
if(ak1 == ak2):
storedListAppliance.append(ak1)
if 'Light' in ak1:
storeListCategory.append('Light')
if 'Fan' in ak1:
storeListCategory.append('Fan')
if 'Heater' in ak1:
storeListCategory.append('Heater')
storeDF = list(zip(storedListAppliance, storedListOn, storedListOff, storedListDevice, storeListCategory))
sdf = pd.DataFrame(data = storeDF, columns = ['type', 'OnTime' , 'OffTime', 'device', 'category'])
print(sdf,'12')
#ptcn.set_index('time', inplace = True)
print(str(outputList),'6')
print("Current Dict Contain:",str(outputList),'11')
print('Length of dict:', len(outputList),'12')
目前的结果是:
type OnTime OffTime device category
0 Fan1P3 2019-10-28 12:23:52 2019-10-28 20:12:32 8655 Fan
1 Heater1 2019-10-28 18:30:20 2019-10-28 22:11:12 8655 Heater 12
{'Light1_ON': '2019-10-28 09:11:23', 'Light2_ON': '2019-10-28 10:15:12', 'Light1_OFF': '2019-10-28 15:11:23', 'Light2_OFF': '2019-10-28 22:00:23', 'Light3_ON': '2019-10-29 05:12:23'} 6
Fan1P3_OFF
Light2_OFF
Retrieve Error 2 10
Heater1_OFF
Light3_ON
Retrieve Error 9
Current Dict Contain: {'Light1_ON': '2019-10-28 09:11:23', 'Light2_ON': '2019-10-28 10:15:12', 'Light1_OFF': '2019-10-28 15:11:23', 'Light2_OFF': '2019-10-28 22:00:23', 'Light3_ON': '2019-10-29 05:12:23'} 11
Length of dict: 5 12
我想要的结果是列表只剩下light3u和DateTime,但是我得到的结果在df中只得到了2行正确的行
我想要的输出:
type OnTime OffTime device category
0 Fan1P3 2019-10-28 12:23:52 2019-10-28 20:12:32 8655 Fan
1 Heater1 2019-10-28 18:30:20 2019-10-28 22:11:12 8655 Heater
2 Light1 2019-10-28 09:11:23 2019-10-28 15:11:23 8655 Light
3 Light2 2019-10-28 10:15:12 2019-10-28 22:00:23 8655 Light
Current Dict Contain:{ 'Light3_ON': '2019-10-29 05:12:23' }
目前没有回答
相关问题 更多 >
编程相关推荐