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

Pandas时间列区间判断报AttributeError与TypeError问题求解

问题修复方案

错误原因

  • 第一个错误AttributeError: 'Series' object has no attribute 'time':df['time']是pandas的Series对象,不能直接调用仅适用于单个datetime对象的.time()方法,需要先通过.dt访问器调用datetime系列的专属属性。
  • 第二个错误TypeError: 'Series' object is not callable:.dt.time是属性不是方法,不需要加()调用,加括号相当于把返回的时间Series当成函数执行,就会报不可调用错误。
  • 额外逻辑运算错误:pandas中对布尔序列做逻辑与运算不能用and关键字,要用位运算符&,且两个判断条件都要加括号保证运算优先级。

修复后可运行代码

import numpy as np
import pandas as pd
from datetime import datetime

# 生成数据集
df = pd.DataFrame([
    {
        "time": "2021-10-26 9:30",
        "open": "457.2",
        "high": "457.29",
        "low": "456.78",
        "close": "456.9383",
        "volume": "594142"
    },
    {
        "time": "2021-10-26 9:31",
        "open": "456.94",
        "high": "457.07",
        "low": "456.8",
        "close": "456.995",
        "volume": "194061"
    },
    {
        "time": "2021-10-26 9:32",
        "open": "456.99",
        "high": "457.22",
        "low": "456.84",
        "close": "457.21",
        "volume": "186114"
    },
    {
        "time": "2021-10-26 9:33",
        "open": "457.22",
        "high": "457.45",
        "low": "457.2011",
        "close": "457.308",
        "volume": "294158"
    },
    {
        "time": "2021-10-26 9:34",
        "open": "457.31",
        "high": "457.4",
        "low": "457.25",
        "close": "457.32",
        "volume": "172574"
    },
    {
        "time": "2021-10-26 9:35",
        "open": "457.31",
        "high": "457.48",
        "low": "457.18",
        "close": "457.44",
        "volume": "396668"
    },
    {
        "time": "2021-10-26 9:36",
        "open": "457.48",
        "high": "457.6511",
        "low": "457.44",
        "close": "457.57",
        "volume": "186777"
    }
 ])

start_time = datetime.strptime("09" + "31", "%H%M").time()
end_time = datetime.strptime("09" + "33", "%H%M").time()

# 转换时间列为datetime类型
df['time'] = pd.to_datetime(df['time'])

# 生成布尔列,无需额外用np.where,直接返回布尔序列即可
df['isWithinTimeframe'] = (df['time'].dt.time >= start_time) & (df['time'].dt.time < end_time)

运行结果说明

按给定的9:31到9:33左闭右开时间范围,最终isWithinTimeframe列只有9:31、9:32两行值为True,其余为False,完全匹配需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 17:27:04