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
相关产品推荐
相关产品推荐

