如何用条件语句基于时间列拆分日夜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
相关产品推荐
相关产品推荐

