首页 > 解决方案 > 如何比较熊猫中的字符串和日期时间?

问题描述

我收到以下错误TypeError: unsupported operand type(s) for &: 'str' and 'DatetimeArray',我想检查“Resumo”列中的值是否等于“Transfêrencia”并检查日期比较。

但是使用“np.select”我得到一个错误,因为数据类型。

我怎样才能做到这一点?

>>>df
Resumo Scan    DHR_ULT_ATUALIZACAO      DT_PREVISAO
Transferência 2021-07-20 09:00:00 2021-07-16 00:00:00
Transferência 2021-07-16 08:00:00 2021-07-16 00:00:00
Transferência 2021-07-20 16:00:00 2021-07-19 00:00:00



conditions  = [ df["Prazo"]=="No prazo",
              df["Resumo"]=="Coleta",
              df["Resumo"]=="Hub",
              df["Resumo"]=="Transbordo",
              (df["Resumo"]=="Transferência" & pd.to_datetime(df["DHR_ULT_ATUALIZACAO"], format=("%Y-%m-%d %H:%M:%S")) > pd.to_datetime(df["DT_PREVISAO"], format=("%Y-%m-%d %H:%M:%S")))
             ]

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

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

标签: pythonpandas

解决方案


如果先将 datelike 列转换为 datetime 会更容易:

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"]))
             ]
                #^added bracket                    ^added bracket

推荐阅读