2017-12-15 3 views
0

Ich habe eine Zeitreihendaten, die Daten für jede Minute hat, aber aufgrund einiger Probleme im Sensor, manchmal die Daten nicht abgerufen werden und dass keine winzigen Daten aufgezeichnet werden. Ich möchte herausfinden, an welchem ​​Tag und zu welcher Stunde dies geschah. Ich habe die Daten im Pandas Datenrahmen. Dies ist mein Code-Snippet zum Speichern im Datenrahmen, ich möchte anzeigen welche Minuten Daten nicht empfangen wurden.Finden Sie fehlende Minuten Daten in Zeitreihendaten mit Pandas

l=['Year', 'Month', 'Day', 'Hour', 'Minute'] 
df = pd.DataFrame(columns=l) 
k=0 

if __name__ == '__main__': 
    client = MongoClient("localhost", 27017, maxPoolSize=50) 
    db=client.test 
    collection=db['data'] 
    cursor = collection.find({"deviceId":3},{"timestamp":1,"cd":1}).sort("timestamp",-1).limit(1000) 
    for document in cursor: 
     for key,value in document.items()[1:-1]: 
      df.loc[k,'Year']=2017 
      df.loc[k,'Month']=value.month 
      df.loc[k,'Day']=value.day 
      df.loc[k,'Hour']=value.hour 
      df.loc[k,'Minute']=value.minute 
      k=k+1 
    minute_a = pd.Series(np.arange(0, 60)) 

Ich dachte isin Funktion minute_a zu verwenden, aber wie jede Stunde, die ich überprüfen müssen, kann ich nicht herausfinden, wie es zu tun?

Antwort

1

isin wäre eine gute Möglichkeit, dies zu tun. Der einfachste Weg, dies zu tun, wäre jedoch, Ihre Sensorzeitdaten in eine einzige DatetimeIndex zu glätten, so dass Sie sie mit einer Referenz DatetimeIndex vergleichen können.

# creating reference DatetimeIndex idx_ref with a minute frequency 
end=datetime.now().replace(second=0, microsecond=0) 
dt = end - timedelta(days=1) 
idx_ref = pd.DatetimeIndex(start=dt, end=end,freq='min') 

# idx_dat represents your DatetimeIndex from the sensor 
gaps = idx_ref[~idx_ref.isin(idx_dat)] 

Angenommen, Sie sind nur an den Zeitlücken natürlich interessiert.

Verwandte Themen