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

如何用条件语句基于时间列拆分日夜DataFrame?(Python Pandas)

解决datetime.time与Timestamp无法比较的问题及拆分日夜DataFrame的正确方法

错误原因

触发TypeError的核心是类型不匹配:

  • df['time']是通过dt.time提取的datetime.time对象
  • pd.to_datetime('04:00:00')生成的是带默认日期的Timestamp对象
    这两种类型无法直接用>/<=等比较运算符操作。

两种正确解决思路

思路1:统一为datetime.time类型比较

将时间阈值转换为datetime.time类型,与df['time']保持一致:

from datetime import time

# 定义时间阈值为datetime.time类型
time_1 = time(4, 0, 0)
time_2 = time(9, 0, 0)

# 筛选日间数据
df_day = df[(df['time'] > time_1) & (df['time'] <= time_2)]
# 筛选夜间数据(取日间数据的反集)
df_night = df[~((df['time'] > time_1) & (df['time'] <= time_2))]
# 大数据集更高效的写法:df_night = df.drop(df_day.index)

思路2:直接使用原r_t列的时间属性(更高效)

无需单独生成time列,直接借助r_t的dt属性筛选,减少内存开销:

from datetime import time

# 精确到时分秒的日间筛选
df_day = df[(df['r_t'].dt.time > time(4,0,0)) & (df['r_t'].dt.time <= time(9,0,0))]
# 若只需按小时范围筛选(忽略分秒),写法更简洁
df_day = df[(df['r_t'].dt.hour > 4) & (df['r_t'].dt.hour <=9)]

# 夜间数据筛选
df_night = df[~df.index.isin(df_day.index)]

额外语法修正

你原代码中df_night = not in(...)是语法错误,正确的反集筛选需用~(布尔索引取反)或df.drop()方法实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 14:36:23