You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 20:39:00