Pandas 在时间序列数据框中设置频率

问题描述 投票:0回答:1

我有一个包含每月数据的数据框,它看起来像这样。

            metric
date    
2021-01-01  0.822201
2021-02-01  0.845884
2021-03-01  0.868405
2021-04-01  0.866245
2021-05-01  0.861446
2021-06-01  0.859356
2021-07-01  0.864788
2021-08-01  0.868941
2021-09-01  0.875224
2021-10-01  0.868509
2021-11-01  0.859725

此数据帧的推断频率为

DatetimeIndex(['2021-05-01', '2023-08-01', '2023-09-01', '2021-11-01',
               '2023-06-01', '2022-01-01', '2023-10-01', '2023-12-01',
               '2024-04-01', '2022-10-01', '2021-08-01', '2021-06-01',
               '2021-10-01', '2024-03-01', '2023-07-01', '2022-02-01',
               '2022-07-01', '2021-09-01', '2022-11-01', '2022-03-01',
               '2024-02-01', '2023-03-01', '2021-12-01', '2021-07-01',
               '2023-02-01', '2023-11-01', '2023-04-01', '2023-05-01',
               '2021-03-01', '2021-02-01', '2024-01-01', '2022-05-01',
               '2021-01-01', '2022-06-01', '2022-09-01', '2022-04-01',
               '2021-04-01', '2022-12-01', '2023-01-01', '2022-08-01'],
              dtype='datetime64[ns]', name='date', freq=None)

所以,我尝试像这样显式设置它:

data.index.freq = 'MS'

但是失败并出现错误

ValueError: Inferred frequency None from passed values does not conform to passed frequency MS
我尝试调试索引中是否有任何缺失值,但看起来并非如此:

pd.date_range(data.index.min(), data.index.max(), freq='MS').difference(data.index)

输出:

DatetimeIndex([], dtype='datetime64[ns]', freq=None)
python pandas
1个回答
0
投票

您的索引必须已排序,但目前尚未排序,这会触发错误。

idx = pd.DatetimeIndex(['2021-05-01', '2023-08-01', '2023-09-01', '2021-11-01',
               '2023-06-01', '2022-01-01', '2023-10-01', '2023-12-01',
               '2024-04-01', '2022-10-01', '2021-08-01', '2021-06-01',
               '2021-10-01', '2024-03-01', '2023-07-01', '2022-02-01',
               '2022-07-01', '2021-09-01', '2022-11-01', '2022-03-01',
               '2024-02-01', '2023-03-01', '2021-12-01', '2021-07-01',
               '2023-02-01', '2023-11-01', '2023-04-01', '2023-05-01',
               '2021-03-01', '2021-02-01', '2024-01-01', '2022-05-01',
               '2021-01-01', '2022-06-01', '2022-09-01', '2022-04-01',
               '2021-04-01', '2022-12-01', '2023-01-01', '2022-08-01'],
              dtype='datetime64[ns]', name='date')

# ensure sorting
idx = idx.sort_values()

idx.freq = 'MS'

输出:

DatetimeIndex(['2021-01-01', '2021-02-01', '2021-03-01', '2021-04-01',
               '2021-05-01', '2021-06-01', '2021-07-01', '2021-08-01',
               '2021-09-01', '2021-10-01', '2021-11-01', '2021-12-01',
               '2022-01-01', '2022-02-01', '2022-03-01', '2022-04-01',
               '2022-05-01', '2022-06-01', '2022-07-01', '2022-08-01',
               '2022-09-01', '2022-10-01', '2022-11-01', '2022-12-01',
               '2023-01-01', '2023-02-01', '2023-03-01', '2023-04-01',
               '2023-05-01', '2023-06-01', '2023-07-01', '2023-08-01',
               '2023-09-01', '2023-10-01', '2023-11-01', '2023-12-01',
               '2024-01-01', '2024-02-01', '2024-03-01', '2024-04-01'],
              dtype='datetime64[ns]', name='date', freq='MS')

如果您有 DataFrame,请使用

df.sort_index(inplace=True)

© www.soinside.com 2019 - 2024. All rights reserved.