pandas中求平均时间差

用最大时间减去最小时间 然后除以次数

报错:
TypeError: ufunc true_divide cannot use operands with types dtype(‘O’) and dtype(’<m8[ns]’)

同样的程序在处理训练集和测试集出现的结果是不同的

时间类型均为

orderTime_x    datetime64[ns]
orderTime_y    datetime64[ns]
dtype: object
一种结果是
ID                        
100000000013    10122563500000000
100000000393                    0
100000000459      727472500000000
100000000637                    0
100000000695                    0
100000000949      257783333333333
100000000975                    0
100000001023     1117524500000000
dtypes 为object 或者 dtype('O')

另一种情况
userid
100000001023           0 days 00:00:00
100000001505    1 days 04:46:17.750000
100000003461           0 days 00:00:00
100000005007           0 days 00:00:00
100000008119           0 days 00:00:00
100000009017   30 days 01:18:12.500000
100000009773           0 days 00:00:00
100000009925    0 days 00:41:10.500000
100000010199   27 days 11:07:17.625000
100000014029           0 days 00:00:00
100000015969           0 days 00:00:00

dtypes为
timedelta64[ns] 或者 dtype('<m8[ns]')

不清楚是啥原因,只好分开进行了处理
这里面也有一个坑
判断是否为object类型时返回的不一定是bool类型,需要进行记一步的判断

f21 = pd.DataFrame(feature.loc[time_gap.index]["F2.1"])
f217 = (time_gap["orderTime_x"] -
        time_gap["orderTime_y"]) / f21["F2.1"]
f217 = pd.DataFrame(f217)

bf217 = f217.dtypes != object
# 是否为bool类型
if isinstance(bf217, bool):
	# 如果为bool,则判断是否为object
    if bf217:
        f217[0] = f217[0].values / np.timedelta64(1, 'ns')
else:
	# 如果不是bool,需要使用.bool()方法变成真正的bool类型
    if bf217.bool():
        f217[0] = f217[0].values / np.timedelta64(1, 'ns')

feature["F2.17"] = f217

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值