2017-12-15 22 views
0

私は、1分ごとのデータを持つ時系列データを持っていますが、センサの問題によってデータが取り出されず、分データが記録されないことがあります。私はこの日に何が起こったのかを知りたい。私はパンダのデータフレームにデータを持っています。これは私のコードスニペットをデータフレームに格納するために、私は分データが受信されなかったことを表示したいと思います。パンダを使用して時系列データの欠損データを見つける

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)) 

私はminute_aを使用してisin機能を使用するように考えていたが、私はチェックする必要があり、毎時間のように、私はそれを行う方法を見つけ出すことはできませんか?

答えて

1

isinこれを行う良い方法です。しかし、これを行う最も簡単な方法は、センサー時間データを単一のDatetimeIndexにまとめて、参照番号DatetimeIndexと比較することです。

# 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)] 

あなたは時間ギャップだけに興味があると仮定します。

関連する問題