ufunc true_divide无法使用类型为dtype('float64')和dtype('<m8 [ns]')的操作数

时间:2019-06-07 19:56:18

标签: python datetime

我的代码有问题,我需要根据一些属性找到某个值。

xls = xlrd.open_workbook(filed, on_demand=True)
for sheet_name in xls.sheet_names():
    df = pd.read_excel(filed,sheet_name)  
    df['diffspeed']=df['speed'].diff().fillna(0)
    df['timeshift'] = df['time'].shift(-1)
    df['timediff']=(df['timeshift']-df['time'])
    df['Distance']= df['diffspeed']/df['timediff']  
    df.to_excel(writer,sheet_name)
writer.save()           

它一直给我以下错误 ufunc true_divide不能使用类型为dtype('float64')和dtype('

1 个答案:

答案 0 :(得分:0)

df['timediff']的数据类型是Timedelta,从numpy dtype kind m看。它旨在表示两个Datetime对象之间的差异,并通过减去第df['timediff']=(df['timeshift']-df['time'])行中的对象来确定。尽管普通float没有单位,但您可以将Timedeltas视为拥有单位。它们不能用作除数,因为该单位的倒数没有以numpy / pandas表示。

您可以将它们转换为以秒为单位的普通浮点数,方法是 df['timediff'] / np.timedelta64(1, 's') 其中np代表numpy 因此,最后一行显示为 df['Distance'] = df['diffspeed']/(df['timediff'] / np.timedelta64(1, 's'))

有关更多说明,请参见this answer too