Pandas日期类型比较及多级索引DataFrame过滤报错求助
解决多级索引DataFrame日期过滤的TypeError问题
直接解决方案
针对多级索引(第0层为日期)的DataFrame,可通过以下三种方式修复日期过滤的类型错误:
forecast_start_date = df.index.get_level_values(0).max() + pd.DateOffset(months=1) forecast_end_date = df.index.get_level_values(0).max() + pd.DateOffset(months=12) # 方案1:将索引层级转为DatetimeIndex date_level = pd.DatetimeIndex(df_test.index.get_level_values(0)) df_filtered = df_test[(date_level >= forecast_start_date) & (date_level <= forecast_end_date)] # 方案2:用pd.Index包装数组 date_level = pd.Index(df_test.index.get_level_values(0)) df_filtered = df_test[(date_level >= forecast_start_date) & (date_level <= forecast_end_date)] # 方案3:简洁的索引切片(推荐) df_filtered = df_test.loc[forecast_start_date:forecast_end_date, :]
问题原因
报错TypeError: '>=' not supported between instances of 'numpy.ndarray' and 'Timestamp'是因为get_level_values(0)返回的是numpy数组,而非Pandas的日期索引对象,直接与Timestamp类型的日期比较会触发类型不兼容问题。
原问题背景
尝试通过另一个DataFrame的日期过滤当前多级索引(第0层为日期)的DataFrame时,始终触发上述错误。已尝试过以下方案但未解决:
- 《Filtering Pandas DataFrames on dates》
- 《Datetime and Timestamp equality in Python and Pandas》
原代码如下:
forecast_start_date = (df.index.get_level_values(0).max()+pd.DateOffset(months=1)) forecast_end_date = (df.index.get_level_values(0).max() + pd.DateOffset(months=12)) df_test[(df_test.index.get_level_values(0) >= forecast_start_date) & (df_test.index.get_level_values(0) <= forecast_end_date)]
内容的提问来源于stack exchange,提问作者JordanBH
相关产品推荐
相关产品推荐

