我有一个包含每月数据的数据框架,它看起来是这样的.

            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

此数据帧的推断频率为None

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)

所以,我try 这样明确地设置它:

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)

发帖主题:Re:Kolibrios

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')

如果您有数据框架,请使用df.sort_index(inplace=True).

它还应该包含开始和结束之间的所有值:

pd.DatetimeIndex(['2021-01-01', '2021-02-01', '2021-03-01'], freq='MS')
# DatetimeIndex(['2021-01-01', '2021-02-01', '2021-03-01'], dtype='datetime64[ns]', freq='MS')

# now March is missing
pd.DatetimeIndex(['2021-01-01', '2021-02-01', '2021-04-01'], freq='MS')
# ValueError: Inferred frequency None from passed values does not conform to passed frequency MS

另请注意,如果您有具有给定频率的排序索引,则洗牌或删除内部项将删除频率:

df = pd.DataFrame(columns=['metric'], index=idx.sort_values())

df.index.freq
# <MonthBegin>

# shuffled index
df.sample(frac=1).index.freq
# None

# missing internal indice
df.drop('2021-02-01').index.freq
# None

Python相关问答推荐

Python:根据创建时间合并两个收件箱

带有Postgres的Flask-Data在调用少量API后崩溃

如何使用PyTest根据self 模拟具有副作用的属性

用Python获取HTML Span类中的数据

请从Python访问kivy子部件的功能需要帮助

opencv Python稳定的图标识别

在for循环中仅执行一次此操作

从包含数字和单词的文件中读取和获取数据集

如何用symy更新分段函数

numba jitClass,记录类型为字符串

PywinAuto在Windows 11上引发了Memory错误,但在Windows 10上未引发

为什么带有dropna=False的groupby会阻止后续的MultiIndex.dropna()工作?

如何使用html从excel中提取条件格式规则列表?

Python虚拟环境的轻量级使用

Python中绕y轴曲线的旋转

对象的`__call__`方法的setattr在Python中不起作用'

Pre—Commit MyPy无法禁用非错误消息

Stacked bar chart from billrame

LocaleError:模块keras._' tf_keras. keras没有属性__internal_'''

找到相对于列表索引的当前最大值列表""