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

如何对pandas中由两日期差值生成的duration列进行数值筛选

问题解决方法

报错原因

duration列是timedelta64时间差类型,直接和整数对比时,pandas无法判断整数对应的时间单位(天/小时/秒等),因此触发类型匹配错误。

解决方案

以下三种方案性能差异极小,可根据使用场景选择:

  • 方案1:查询时将时间差转为对应单位的整数(无需修改原表,最灵活)
    如果按天为单位筛选,直接调用timedelta的dt属性取天数即可:
    df.query('duration.dt.days < 5')
    
    需要其他单位时修改对应属性即可,比如按总秒数比较就换成duration.dt.total_seconds() < 5。
  • 方案2:将整数转为对应时间差类型再比较
    需要用@符号在query语句中引用外部的pandas时间差对象:
    import pandas as pd
    # 示例为判断是否小于5天,可修改Timedelta参数调整单位,比如hours=5代表5小时
    df.query('duration < @pd.Timedelta(days=5)')
    
  • 方案3:生成duration列时直接转成对应单位的整数(适合频繁使用duration做数值计算的场景)
    生成列时就做转换,后续所有操作都可以直接按整数处理:
    df['duration'] = (df['date2'] - df['date1']).dt.days
    # 后续筛选无需额外处理
    df.query('duration < 5')
    

疑问解答

你提到的「将数值5转换为对应的时间类型对象」是可行的解决思路,也就是上面的方案2,和转时间差为整数的思路没有绝对优劣,按需选择即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 11:54:03