未知列名时如何仅保留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
相关产品推荐
相关产品推荐

