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

Pandas DataFrame按指定年份提取行返回空结果问题求解

问题原因

cdata['mos_time'].dt.year返回的是整数类型的年份值,而你用于匹配的years列表内元素均为字符串类型,类型不匹配导致isin()判断全部为False,因此最终得到的df1、df2均为空。此外你原有代码中yearslt = years属于列表浅拷贝,删除yearslt末尾元素会同步修改原years列表,属于不合理写法。


修正代码方案

方案1:基于原有逻辑调整

import pandas as pd
# 先确保mos_time列为datetime类型,若原列已经是该类型可跳过该行
cdata['mos_time'] = pd.to_datetime(cdata['mos_time'])

# 年份列表改为整数类型
years = [1991,1992,1993,1994,1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,
         2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,2021]
# 筛选2021年数据
df1 = cdata[cdata['mos_time'].dt.year == years[-1]]
# 切片取1991-2020年的年份列表,避免修改原列表
yearslt = years[:-1]
df2 = cdata[cdata['mos_time'].dt.year.isin(yearslt)]

方案2:更简洁的写法,无需提前构造年份列表

import pandas as pd
cdata['mos_time'] = pd.to_datetime(cdata['mos_time'])
# 直接筛选2021年数据
df1 = cdata[cdata['mos_time'].dt.year == 2021]
# 直接筛选1991-2020年数据
df2 = cdata[(cdata['mos_time'].dt.year >= 1991) & (cdata['mos_time'].dt.year <= 2020)]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 09:18:00