使用pd.date_rangedr = pd.date_range('2020', freq='15min', periods=n_obs)会产生间隔或频率为 15 分钟的 DateTimeIndex :
DatetimeIndex(['2020-01-01 00:00:00', '2020-01-01 00:15:00',
'2020-01-01 00:30:00', '2020-01-01 00:45:00',
'2020-01-01 01:00:00'],
dtype='datetime64[ns]', freq='15T')
Run Code Online (Sandbox Code Playgroud)
您可以使用它来设置 pandas 数据框,例如:
import pandas as pd
import numpy as np
# data
np.random.seed(10)
n_obs = 10
daterange = pd.date_range('2020', freq='15min', periods=n_obs)
values = np.random.uniform(low=-1, high=1, size=n_obs).tolist()
df = pd.DataFrame({'time':daterange, 'value':values})
df = df.set_index('time')
Run Code Online (Sandbox Code Playgroud)
现在您可以再次pd.infer_freq(df.index)检索频率'15T'以进行进一步计算。仔细观察help(pd.infer_freq())让我们知道pd.infer_freq将:
Run Code Online (Sandbox Code Playgroud)Infer the most likely frequency given the input index. If the frequency is uncertain, a warning will be printed.
'15T'我对此的理解是,如果缺少一些观察结果,从而导致时间索引不规则,则可以检索。但是当我使用以下方法删除一些观察结果时:
dropped = df.index[[1,3]]
df = df.drop(dropped)
Run Code Online (Sandbox Code Playgroud)
然后pd.infer_freq(df.index)返回None。如果我们设置 ,也会发生这种情况n_obs = 100。[...] infer the most likely frequency [...]因此,当我认为这意味着pd.infer_freq()可以推断出这实际上是一个频率为 15 分钟、只有几个缺失值的索引时,我似乎希望有点太多了。我是否可以使用任何其他方法来使用 pandas 以编程方式从有点不规则的时间序列推断索引频率?
您可以计算索引中值的最小时间差(此处min_delta),尝试在索引中找到 3 个连续值,每个值之间都有最小时间差,然后调用infer_freq索引的这些连续值:
diffs = (df.index[1:] - df.index[:-1])
min_delta = diffs.min()
mask = (diffs == min_delta)[:-1] & (diffs[:-1] == diffs[1:])
pos = np.where(mask)[0][0]
idx = df.index
print(pd.infer_freq(idx[pos: pos + 3]))
Run Code Online (Sandbox Code Playgroud)
这将检索“15T”。
| 归档时间: |
|
| 查看次数: |
1997 次 |
| 最近记录: |