【问题标题】:Find missing minute data in time series data using pandas使用 pandas 查找时间序列数据中缺失的分钟数据
【发布时间】:2018-05-29 15:15:09
【问题描述】:

我有一个时间序列数据,每分钟都有数据,但由于传感器的一些问题,有时数据没有被提取并且没有记录那一分钟的数据。我想找出这件事发生在哪一天和哪一小时。我有熊猫数据框中的数据。这是我存储在数据框中的代码 sn-p,我想显示未收到的分钟数据。

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 函数,但由于我必须每小时检查一次,我不知道该怎么做?

【问题讨论】:

    标签: python pandas numpy


    【解决方案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)]
    

    当然,假设您只对时间间隔感兴趣。

    【讨论】:

    • pd.DatetimeIndex(start=dt, end=end, freq='min') 不再受支持。因此参数 start 和 end 被删除。您可以将 pd.date_range()、pd.timedelta_range()、pd.period_range() 或 pd.interval_range 与 start、end、freq 一起使用。答案应该更新。
    猜你喜欢
    • 2020-03-19
    • 2021-01-06
    • 2021-06-23
    • 2015-11-21
    • 1970-01-01
    • 2015-07-31
    • 1970-01-01
    • 2017-02-12
    • 1970-01-01
    相关资源
    最近更新 更多