我有一个包含每月数据的数据框,它看起来像这样。
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)
您的索引必须已排序,但目前尚未排序,这会触发错误。
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)
。