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
相关产品推荐
相关产品推荐

