【问题标题】:Autofill datetime in Pandas by previous increment按以前的增量在 Pandas 中自动填充日期时间
【发布时间】:2021-06-27 01:22:22
【问题描述】:

鉴于 Pandas DataFrame 中以前的日期时间值(作为索引或列中的值),有没有办法根据以前的固定增量“自动填充”剩余时间增量?

例如,给定:

import pandas as pd
import numpy as np    
df = pd.DataFrame({'B': [0, 1, 2, np.nan, 4]},
                      index = [pd.Timestamp('20130101 09:00:00'),
                               pd.Timestamp('20130101 09:00:05'),
                               pd.Timestamp('20130101 09:00:10'),
                               np.nan,
                               np.nan])

我想应用一个函数来产生:

B
2013-01-01 09:00:00 0.0
2013-01-01 09:00:05 1.0
2013-01-01 09:00:10 2.0
2013-01-01 09:00:15 NaN
2013-01-01 09:00:20 4.0

我缺少最后两个数据点的时间步长。在这里,时间步长固定为 5 秒增量。

这将用于数千行。虽然我可能会 reset_index 然后创建一个应用于每一行的函数,但这似乎很麻烦。有没有我找不到的巧妙或内置的方法来做到这一点?

【问题讨论】:

  • 这不是 5 秒的间隔(不是分钟)吗?另外,我不清楚您要用来填充缺失时间间隔的逻辑。例如,如果采样是混合的,例如5秒、15秒、10秒等
  • @Alexander,将 5 秒修正为 5 分钟,但为了演示,两者都可以。这也适用于固定采样。我将添加明确说明的语言。

标签: python pandas datetime time-series


【解决方案1】:

假设第一个索引值是一个有效的日期时间,并且所有的值都间隔 5 秒,您可以执行以下操作:

df.index = pd.date_range(df.index[0], periods=len(df), freq='5s')
>>> df
                       B
2013-01-01 09:00:00  0.0
2013-01-01 09:00:05  1.0
2013-01-01 09:00:10  2.0
2013-01-01 09:00:15  NaN
2013-01-01 09:00:20  4.0

【讨论】:

    【解决方案2】:

    这个解决方案可能对你有用,但也可以使用 reset_index() 函数。

    new_dateindex=pd.Series(pd.date_range(start=pd.Timestamp('20130101 09:00:00'),periods=1000,freq='5S'),name='Date')
    

    #'periods=1000' 可以改为'periods=len(df.index)'

    df.reset_index().join(new_dateindex,how='right')
    

    【讨论】:

      猜你喜欢
      • 2022-06-15
      • 1970-01-01
      • 1970-01-01
      • 2017-01-22
      • 2014-02-09
      • 2014-02-22
      • 2020-11-07
      • 1970-01-01
      • 2019-05-16
      相关资源
      最近更新 更多