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

pandas中如何实现字符串判断与datetime比较,解决np.select类型报错问题

报错核心原因

该报错由运算符优先级错误导致:Python 中按位与运算符 & 的优先级高于==、>等比较运算符。你写的组合条件没有给每个独立判断加括号,执行时会优先计算 "Transferência" & pd.to_datetime(...),也就是字符串和时间数组做与运算,直接触发类型不兼容的错误。

修复方案

只需要给组合条件里的两个独立判断分别用括号包裹,确保先执行比较运算、再执行按位与运算即可。如果要提升运行效率,也可以提前把日期列统一转换为datetime类型,避免条件判断时重复转换。

完整可运行代码

import pandas as pd
import numpy as np

# 示例数据构造
df = pd.DataFrame({
    "Resumo": ["Transferência", "Transferência", "Transferência"],
    "DHR_ULT_ATUALIZACAO": ["2021-07-20 09:00:00", "2021-07-16 08:00:00", "2021-07-20 16:00:00"],
    "DT_PREVISAO": ["2021-07-16 00:00:00", "2021-07-16 00:00:00", "2021-07-19 00:00:00"],
    "Prazo": ["No prazo"]*3 # 补全示例缺失的Prazo列
})

# 提前转换日期列类型(可选优化,减少重复计算)
df["DHR_ULT_ATUALIZACAO"] = pd.to_datetime(df["DHR_ULT_ATUALIZACAO"], format="%Y-%m-%d %H:%M:%S")
df["DT_PREVISAO"] = pd.to_datetime(df["DT_PREVISAO"], format="%Y-%m-%d %H:%M:%S")

# 修正后的条件列表
conditions  = [ 
    df["Prazo"]=="No prazo",
    df["Resumo"]=="Coleta",
    df["Resumo"]=="Hub",
    df["Resumo"]=="Transbordo",
    # 核心修改:两个比较逻辑分别加括号,再用&连接
    (df["Resumo"]=="Transferência") & (df["DHR_ULT_ATUALIZACAO"] > df["DT_PREVISAO"])
]

choices     = [ 
    "No prazo",
    "Coleta",
    "Hub",
    "Falta",
    "Transferência¹"
]

df["Desvios"] = np.select(conditions, choices, default = "Entregues")

内容的提问来源于stack exchange,提问作者João Galdino

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 07:42:03