sop*_*phg 2 python datetime pandas
我有一个数据集,每秒收到多个值 - 最多 100 个 DFS(不多,但不总是 100)。挑战在于日期字段没有比秒更精细地捕获时间,因此多行具有相同的 hh:mm:ss 时间戳。这些都很好,但我在整个集合中也有几秒钟的缺失,即根本没有显示。
因此,我的 2 个初始列可能如下所示,其中我缺少 54 秒步骤:
2020-08-24 03:36:53, 5
2020-08-24 03:36:53, 8
2020-08-24 03:36:53, 6
2020-08-24 03:36:55, 8
Run Code Online (Sandbox Code Playgroud)
由于合法日期“重复”以及我需要的信息,我不想聚合,但我确实需要创建丢失的秒数,插入它们并填充(NaN等),以便我可以适当地管理它们与其他数据集对齐。
我似乎可以做到这一点的唯一方法是使用嵌套的 if 循环,它查看前一个时间戳,如果它与当前单元格相同 ( pt == ct) 则不执行任何操作,如果少 1 ( pt = (ct-1)) 则不执行任何操作,但如果比当前单元格大 2 或更多,则插入缺失的 ( pt <= (ct-2))。这感觉有点麻烦(虽然可行)。我是否缺少一种更简单的方法来做到这一点?
我在这里以及 pandas.pydata.org 上的各种函数中检查了很多“填充缺失日期”线程,但重新索引和最常见的日期填充似乎都依赖于没有重复的日期。任何建议都会很棒。
这可以通过创建一个包含您想要考虑的所有时间点的 pandas 系列,然后merge使用原始数据帧来解决。
例如:
start, end = df['date'].min(), df['date'].max()
all_timepoints = pd.date_range(start, end, freq='s').to_series(name='date')
df.merge(all_timepoints , on='date', how='outer', sort=True).fillna(0)
Run Code Online (Sandbox Code Playgroud)
会给:
date value
0 2020-08-24 03:36:53 5.0
1 2020-08-24 03:36:53 8.0
2 2020-08-24 03:36:53 6.0
3 2020-08-24 03:36:54 0.0
4 2020-08-24 03:36:55 8.0
Run Code Online (Sandbox Code Playgroud)