如何获取2007年2月DataFrame排除末行的最后10行数据且避免过时警告
警告原因说明
你当前触发的FutureWarning来自df['2007-02']这种隐式日期索引切片写法,pandas 2.1及以上版本已经将该写法标记为待废弃,后续版本会正式移除,所以建议换成显式的日期筛选逻辑。
无需提前移除最后一行的实现方案
方案1:负索引直接定位(最简洁,适配绝大多数场景)
直接通过iloc负索引锁定目标范围,不需要单独做删除最后一行的操作,同时无兼容性警告:
# 显式筛选2007年2月的全部数据 feb_data = df.loc[df.index.to_period("M") == "2007-02"] # 取倒数第11行到倒数第2行,刚好是排除最后一行的最后10条记录 result = feb_data.iloc[-11:-1, :]
方案2:按最后10天筛选(如果你原来的last('10D')是要取最后10天而非最后10条记录)
完全规避已废弃的API,所有pandas 1.0+版本都支持:
feb_data = df.loc[df.index.to_period("M") == "2007-02"] # 先排除最后一行,再取最后10天的数据 valid_data = feb_data.iloc[:-1] result = valid_data.loc[valid_data.index >= valid_data.index.max() - pd.Timedelta(days=9)]
方案3:drop方法跳过最后一行
如果不想用负索引,也可以直接丢弃最后一行的索引:
feb_data = df.loc[df.index.to_period("M") == "2007-02"] result = feb_data.drop(feb_data.index[-1]).tail(10)
最优写法推荐
日常使用优先选方案1,代码可读性最高、性能最好,且至少5年内不会有兼容性问题。如果你的需求是按天筛选而非按条数筛选,就用方案2。
内容的提问来源于stack exchange,提问作者Laura V.
相关产品推荐
相关产品推荐

