熊猫每年日期时间索引的近似频率

时间:2021-02-08 17:56:27

标签: python pandas frequency datetimeindex

我在不同的文件中有多个时间序列,我知道 Pandas 可以为每个文件推断 DateTimeIndex 的频率:

pd.infer_freq(data.index)

是否有一种编程方式可以从一般文件中获取每年的大致频率。例如:

'M' -> 12
'BM' -> 12
'B' -> 252
'D' -> 365

1 个答案:

答案 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