如何筛选Pandas中每月每日9:15-9:20的数据行及解决筛选报错
解决股票数据时间范围筛选问题
先处理第一个错误:"Can only use .dt accessor with datetimelike values"
这个错误的核心是你的datetime列不是datetime64类型,.dt访问器仅支持该类型的列。先将列转换成正确类型:
import pandas as pd import datetime # 转换datetime列为datetime64类型 df['datetime'] = pd.to_datetime(df['datetime'])
正确筛选9:15-9:20数据的两种方法
方法一:直接基于datetime列筛选
利用.dt.time提取时间部分,结合布尔索引筛选目标时间段:
# 生成时间筛选掩码:时间在9:15(含)到9:20(含)之间 time_mask = (df['datetime'].dt.time >= datetime.time(9, 15)) & (df['datetime'].dt.time <= datetime.time(9, 20)) # 注意:用方括号索引DataFrame,不是圆括号(你之前写的df(time_mask==True)是语法错误) rslt_df = df[time_mask]
方法二:拆分日期和时间列后筛选
如果需要单独保留日期、时间列,先拆分再筛选:
# 拆分出日期和时间列 df['date'] = df['datetime'].dt.date df['time'] = df['datetime'].dt.time # 生成筛选掩码并提取结果 time_mask = (df['time'] >= datetime.time(9, 15)) & (df['time'] <= datetime.time(9, 20)) rslt_df = df[time_mask]
关键注意点
- 必须确保
datetime列是datetime64类型,否则.dt访问器无法使用 - 筛选DataFrame时用方括号
[],不是圆括号()——圆括号用于调用函数,这是你第二个错误的原因
内容的提问来源于stack exchange,提问作者Raghav Mittal
相关产品推荐
相关产品推荐

