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

未知列名时如何仅保留DataFrame中近两年的numpy.datetime64类型列数据

解决方案

原代码出错原因

  • 原生numpy.datetime64类型的列没有.year属性,需要先转换为pandas的DatetimeIndex类型才能直接提取年份字段
  • 筛选逻辑写反:原代码是删除年份大于等于近两年的列,刚好把需要保留的数据清除了
  • 代码末尾缺少右括号,存在语法错误

正确实现代码

按自然年筛选(保留最近两个自然年+当前自然年的所有数据)

import pandas as pd
from datetime import date

# 将列转换为支持日期操作的DatetimeIndex类型
df.columns = pd.to_datetime(df.columns)
# 计算两年前的年份阈值
cutoff_year = date.today().year - 2
# 直接筛选符合要求的列覆盖原df,逻辑更直观
df = df.loc[:, df.columns.year >= cutoff_year]

如果习惯用drop方法实现,调整逻辑即可:

df.drop(df.columns[df.columns.year < cutoff_year], axis=1, inplace=True)

按实际日期跨度筛选(保留距今刚好两年内的所有数据)

如果需要按实际日期长度计算(比如2024年10月15日查询时,仅保留2022年10月15日之后的列,而非所有2022年的列),可以用以下代码:

import pandas as pd
from datetime import date, timedelta

df.columns = pd.to_datetime(df.columns)
# 计算两年前的具体日期,按365*2天计算,需要处理闰年的话可以引入dateutil包的relativedelta
cutoff_date = date.today() - timedelta(days=365*2)
df = df.loc[:, df.columns >= pd.to_datetime(cutoff_date)]

内容的提问来源于stack exchange,提问作者BaluCap

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 05:36:04