Il sensore, invece, è spento dalle 21:45:01 di venerdì fino alle 21:59:59 di domenica.
Può capitare che il sensore salti la scrittura di un dato.
Quindi posso avere due tipi di dato mancante:
1) "eventuali" dati mancanti, nell'intervallo temporale in cui il sensore è acceso
2) dati "sicuramente" mancanti, nell'intervallo temporale in cui il sensore è spento.
Il sensore scrive i suoi dati su un file csv, che io leggo con:
Codice: Seleziona tutto
>>> import pandas as pd
>>> my_data = pd.read_csv("data.csv", header = None, comment = '#', index_col = 5, parse_dates = True)
Facendo per esempio riferimento ai dati ricevuti a cavallo di venerdì/domenica della scorsa settimana, per la colonna degli index ottengo:
Codice: Seleziona tutto
>>> my_data.index
DatetimeIndex(['2021-05-21 19:00:00', '2021-05-21 19:15:00',
'2021-05-21 19:30:00', '2021-05-21 19:45:00',
'2021-05-21 20:00:00', '2021-05-21 20:30:00',
'2021-05-21 20:45:00', '2021-05-21 21:00:00',
'2021-05-21 21:15:00', '2021-05-21 21:30:00',
'2021-05-21 21:45:00', '2021-05-23 22:00:00',
'2021-05-23 22:15:00', '2021-05-23 22:30:00',
'2021-05-23 22:45:00', '2021-05-23 23:00:00',
'2021-05-23 23:15:00', '2021-05-23 23:30:00',
'2021-05-23 23:45:00', '2021-05-24 00:00:00',
'2021-05-24 00:15:00', '2021-05-24 00:30:00',
'2021-05-24 00:45:00', '2021-05-24 01:00:00',
'2021-05-24 01:15:00'],
dtype='datetime64[ns]', name=5, freq=None)
- 2021-05-21 20:15:00 è l'unico dato mancante del primo tipo
- c'è ovviamente un "buco" di dati mancanti tra 2021-05-21 22:00:00 e 2021-05-23 21:45:00, che sono dovuti al fatto che il sensore è spento in quell'intervallo di tempo.
Codice: Seleziona tutto
missing = pd.date_range(start='2021-05-21 19:00', end = '2021-05-24 01:15', freq = '15min').difference(my_data.index)
Codice: Seleziona tutto
>>> missing
DatetimeIndex(['2021-05-21 20:15:00', '2021-05-21 22:00:00',
'2021-05-21 22:15:00', '2021-05-21 22:30:00',
'2021-05-21 22:45:00', '2021-05-21 23:00:00',
'2021-05-21 23:15:00', '2021-05-21 23:30:00',
'2021-05-21 23:45:00', '2021-05-22 00:00:00',
...
'2021-05-23 19:30:00', '2021-05-23 19:45:00',
'2021-05-23 20:00:00', '2021-05-23 20:15:00',
'2021-05-23 20:30:00', '2021-05-23 20:45:00',
'2021-05-23 21:00:00', '2021-05-23 21:15:00',
'2021-05-23 21:30:00', '2021-05-23 21:45:00'],
dtype='datetime64[ns]', length=193, freq=None)
Posso eliminare quello che non mi serve in questo modo:
Codice: Seleziona tutto
>>> [ item for item in missing if item.weekday() in range(0, 4) or ( item.weekday() == 4 and item.time() <= datetime.time(21, 45) ) or ( item.weekday() == 6 and item.time() >= datetime.time(22, 00) ) ]
[Timestamp('2021-05-21 20:15:00')]
Esiste?
Spero di essere stato chiaro, se così non fosse chiedete pure.
Grazie in anticipo