【问题标题】:ufunc true_divide cannot use operands with types dtype('float64') and dtype('<m8[ns]')ufunc true_divide 不能使用类型为 dtype('float64') 和 dtype('<m8[ns]') 的操作数
【发布时间】:2019-10-23 07:53:12
【问题描述】:

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

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('

【问题讨论】:

    标签: python datetime


    【解决方案1】:

    df['timediff']的数据类型是Timedelta,从numpy的dtype kindm可以看出。它旨在表示两个Datetime 对象之间的差异,并通过减去df['timediff']=(df['timeshift']-df['time']) 行中的对象来建立。虽然普通的floats 没有单位,但您可以将 Timedeltas 视为有单位。它们不能用作除数,因为该单位的倒数在 numpy/pandas 中没有表示形式。

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

    更多解释见this answer too

    【讨论】:

      猜你喜欢
      • 2020-12-28
      • 1970-01-01
      • 2020-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多