我有一个带有时间戳和一些值的时间序列。大约每5分钟加/减数据一次。但是在某些日子里根本没有任何时间戳,或者第一个时间戳可能只有下午3点左右,等等。我如何可视化/分析差距?
timestamp temp
2016-08-02 00:14:01 12.1
2016-08-02 09:05:04 22.0
2016-08-02 09:09:44 12.9
2016-08-02 09:15:01 44.1
2016-08-02 09:19:54 11.3
答案 0 :(得分:1)
您可以从以下开始:
df["dtime"]= df.timestamp.diff()
timestamp temp dtime
0 2016-08-02 00:14:01 12.1 NaT
1 2016-08-02 09:05:04 22.0 08:51:03
2 2016-08-02 09:09:44 12.9 00:04:40
3 2016-08-02 09:15:01 44.1 00:05:17
4 2016-08-02 09:19:54 11.3 00:04:53
答案 1 :(得分:1)
在 df 中添加时差列:
df['tDiff'] = df.timestamp.diff()
然后,要查找与上一个时间间隔“过大”的行,请运行:
df[df.tDiff > pd.Timedelta('6M')]
当然,如何设置阈值timedelta是一个选择问题。 您可以取另一个值代替 6分钟。
为了进行测试,我略微扩展了您的数据:
timestamp temp
0 2016-08-02 00:14:01 12.1
1 2016-08-02 09:05:04 22.0
2 2016-08-02 09:09:44 12.9
3 2016-08-02 09:15:01 44.1
4 2016-08-02 09:19:54 11.3
5 2016-08-02 23:58:54 10.0
6 2016-08-03 00:04:01 12.1
7 2016-08-03 09:05:04 22.0
8 2016-08-03 09:09:44 12.9
9 2016-08-03 09:15:01 44.1
10 2016-08-03 09:19:54 11.3
对于此数据,结果为:
timestamp temp tDiff
1 2016-08-02 09:05:04 22.0 08:51:03
5 2016-08-02 23:58:54 10.0 14:39:00
7 2016-08-03 09:05:04 22.0 09:01:03
例如超过8小时后,开始读取 2016-08-02 09:05:04 在上一次阅读之后。
对于间隙的图形表示,另一种方法可能更有用。
添加以前的时间戳列( tDiff 的名称):
df['tPrev'] = df.timestamp.shift()
使用“间隙的开始”和“间隙的结束”列创建一个DataFrame:
gaps = df[(df.timestamp - df.tPrev) > pd.Timedelta('6M')][['tPrev', 'timestamp']]
对于我的源数据,结果是:
tPrev timestamp
1 2016-08-02 00:14:01 2016-08-02 09:05:04
5 2016-08-02 09:19:54 2016-08-02 23:58:54
7 2016-08-03 00:04:01 2016-08-03 09:05:04
但是如何生成这样的图片是一个很好的材料 另一个问题。