我在不同的文件中有多个时间序列,我知道 Pandas 可以为每个文件推断 DateTimeIndex 的频率:
pd.infer_freq(data.index)
是否有一种编程方式可以从一般文件中获取每年的大致频率。例如:
'M' -> 12
'BM' -> 12
'B' -> 252
'D' -> 365
答案 0 :(得分:1)
这是一种选择。我们将使用提供的频率创建一个 date_range 然后 groupby 找出适合一年的最常见数字。 periods
参数应该足够大,以便给定日期范围创建多年数据的频率。真的不需要改变它,除非你想要 ns
或一些非常小的东西。 (但对于那些人来说,手动计算会更有效)。
def infer_periods_in_year(freq, periods=10**4):
"""
freq : str pandas frequency alias.
periods : numeric, given freq, should create many years.
"""
while True:
try:
s = pd.Series(data=pd.date_range('1970-01-01', freq=freq, periods=periods))
break
# If periods is too large
except (pd.errors.OutOfBoundsDatetime, OverflowError, ValueError):
periods = periods/10
return s.groupby(s.dt.year).size().value_counts().index[0]
infer_periods_in_year('D')
#365
infer_periods_in_year('BM')
#12
infer_periods_in_year('M')
#12
infer_periods_in_year('B')
#261
infer_periods_in_year('W')
#52
infer_periods_in_year('min', periods=10**7)
#525600