Python DataFrame中query结合assign使用报错问题排查
问题描述
这是我正在使用的数据集:
运行以下代码时出现错误:
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
相关产品推荐
相关产品推荐

