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

Python DataFrame中query结合assign使用报错问题排查

问题描述

这是我正在使用的数据集:
Dataset

运行以下代码时出现错误:

mast_df.query("(Time_Orderd != '0:-:0') & (Time_Order_picked != '0:-:0')").assign(pick_time = mast_df.Time_Order_picked.str.split(":",expand = True)[0].astype("int")*60+mast_df.Time_Order_picked.str.split(":",expand = True)[1].astype("float")-mast_df.Time_Orderd.str.split(":",expand = True)[0].astype("int")*60+mast_df.Time_Orderd.str.split(":",expand = True)[1].astype("float"))

错误信息:

ValueError: could not convert string to float: '-'

但拆分步骤运行就没有报错:

mast_df = mast_df.query("(Time_Orderd != '0:-:0') & (Time_Order_picked != '0:-:0')")
mast_df.assign(
    pick_time = mast_df.Time_Order_picked.str.split(":",expand = True)[0].astype("int")*60+mast_df.Time_Order_picked.str.split(":",expand = True)[1].astype("float")
    -mast_df.Time_Orderd.str.split(":",expand = True)[0].astype("int")*60+mast_df.Time_Orderd.str.split(":",expand = True)[1].astype("float"))

看起来第一段代码里的query筛选没生效——明明已经排除了值为'0:-:0'的行,却还是出现了转换失败的问题。之前我把空值替换成了'0:-:0',后续会再处理这部分数据。

解决方法

最终用lambda函数解决了问题,代码如下:

mast_df.query("(Time_Orderd != '0:-:0') & (Time_Order_picked != '0:-:0')").assign(
    pick_time = lambda df_ : df_.Time_Order_picked.str.split(":",expand = True)[0].astype("int")*60+
    df_.Time_Order_picked.str.split(":",expand = True)[1].astype("float")-
    df_.Time_Orderd.str.split(":",expand = True)[0].astype("int")*60+
    df_.Time_Orderd.str.split(":",expand = True)[1].astype("float"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 06:18:29