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

如何比较pandas dataframe时间列值与自定义时间并划分昼夜类别

报错原因
  • 运算符优先级问题:&位运算符优先级高于比较运算符,你写的column > stringday & column > stringnight会优先计算stringday & column,类型不匹配直接抛出错误,即使类型兼容逻辑也不符合预期。
  • 判断逻辑错误:你的需求是时间介于6:30到18:30之间标记为Day,原代码的判断条件写反了,且缺少括号包裹比较逻辑。
  • 函数调用方式错误:你直接将整个Series列传入自定义标量处理函数,普通if判断无法直接处理向量序列,需要逐行处理或者改用向量化操作。
  • 列类型问题:大概率df['Time']仍为字符串类型,未转换为时间类型,无法直接和time对象做大小比较。
最优实现方案

推荐直接用pandas向量化操作实现,性能远高于逐行apply,代码简洁易维护:

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

# 1. 先将时间字符串列转换为time类型
df['Time'] = pd.to_datetime(df['Time']).dt.time

# 2. 定义日夜分界点
day_start = time(6, 30, 0)
day_end = time(18, 30, 0)

# 3. 向量化判断生成标签
df['Day_Night'] = np.where(
    (df['Time'] >= day_start) & (df['Time'] <= day_end),
    'Day',
    'Night'
)
原代码修正方案(不推荐,仅做参考)

如果你坚持用自定义函数实现,需要通过apply逐行调用,同时修正逻辑和运算符问题:

from datetime import datetime

def datetimeToDayNight(time_val, daytime='06:30:00', nighttime='18:30:00'):
    """Convert datetime to string 'Day' or 'Night'."""
    stringday= datetime.strptime(daytime, '%H:%M:%S').time()
    stringnight = datetime.strptime(nighttime, '%H:%M:%S').time()
    # 加括号包裹比较逻辑,修正判断条件
    if (time_val >= stringday) and (time_val <= stringnight):
        return 'Day'
    else:
        return 'Night'

df['Day_Night']= df['Time'].apply(datetimeToDayNight)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 18:06:02