如何筛选DataFrame中每年4-10月的datetime类型数据?
问题解决:筛选每年4-10月的datetime数据
错误原因
你直接将datetime64[ns]类型的date列与字符串进行比较,类型不兼容,因此触发TypeError: Invalid comparison between dtype=datetime64[ns] and str。
可行解决方案
你的需求完全可以实现,以下是两种可靠的实现方式:
方法一:通过月份快速筛选(简洁高效)
利用pandas的dt.month属性提取日期的月份,直接筛选4-10月的数据:
filtered_df = df.loc[df['date'].dt.month.between(4, 10)]
该方法会自动保留每年4月1日00:00到10月31日23:59:59的所有数据,符合你的需求。
方法二:精确匹配年度日期区间(严格控制时间点)
如果需要严格匹配每年4月1日00:00:00至10月31日23:59:59的时间范围,可以循环构造每个年份的区间条件:
import pandas as pd # 获取数据覆盖的所有年份 min_year = df['date'].dt.year.min() max_year = df['date'].dt.year.max() years = range(min_year, max_year + 1) # 构造每个年份的筛选条件 filter_conditions = [] for year in years: period_start = pd.Timestamp(f"{year}-04-01 00:00:00") period_end = pd.Timestamp(f"{year}-10-31 23:59:59") filter_conditions.append((df['date'] >= period_start) & (df['date'] <= period_end)) # 合并条件并筛选数据 filtered_df = df.loc[pd.concat(filter_conditions, axis=1).any(axis=1)]
两种方法都能实现你要的效果:2015-10-31 23:59:59之后的数据会直接显示2016-04-01 00:00:00及之后的符合条件的记录。
内容的提问来源于stack exchange,提问作者lagolas1
相关产品推荐
相关产品推荐

