【问题标题】:UFuncTypeError: ufunc 'subtract' cannot use operands with types dtype('<M8[ns]') and dtype('float64')UFuncTypeError: ufunc 'subtract' 不能使用类型为 dtype('<M8[ns]') 和 dtype('float64') 的操作数
【发布时间】:2020-12-28 06:47:39
【问题描述】:

当我解决这个错误时,有一些函数可以解决这个问题,ufunc 'subtract' 不能使用类型为 dtype ('

7enter image description here

import pandas as pd


maint = pd.read_csv('D:/IC/teste_disseracao/banco_de_dados_PdM/PdM_maint.csv')
telemetry = pd.read_csv('D:/IC/teste_disseracao/banco_de_dados_PdM/PdM_telemetry.csv')


telemetry['datetime'] = pd.to_datetime(telemetry['datetime'], format="%Y-%m-%d %H:%M:%S")
maint['datetime'] = pd.to_datetime(maint['datetime'], format="%Y-%m-%d %H:%M:%S")

import numpy as np


#transforma o erro em coluna
comp_rep = pd.get_dummies(maint)
comp_rep.columns = ['datetime', 'machineID', 'comp1', 'comp2', 'comp3', 'comp4']

#combinar erros para uma determinada máquina em uma determinada hora 
comp_rep = comp_rep.groupby(['machineID', 'datetime']).sum().reset_index()

#adicione pontos de tempo onde nenhum componente foi substituído 
comp_rep = telemetry[['datetime', 'machineID']].merge(comp_rep,
                                                      on=['datetime', 'machineID'],
                                                      how='outer').fillna(0).sort_values(by=['machineID', 'datetime'])

components = ['comp1', 'comp2', 'comp3', 'comp4']
for comp in components:
    #converte o indicador para a data mais recente de alteração do componente 
    comp_rep.loc[comp_rep[comp] < 1, comp] = None
    comp_rep.loc[-comp_rep[comp].isnull(), comp] = comp_rep.loc[-comp_rep[comp].isnull(), 'datetime']
    
 #forward-fill a data mais recente de alteração de componente 
    comp_rep[comp] = comp_rep[comp].fillna(method='ffill')
    
#remove as datas em 2014 (pode ter NaN ou datas de mudança de componente futura)  
comp_rep = comp_rep.loc[comp_rep['datetime'] > pd.to_datetime('2015-01-01')]

for comp in components:
    comp_rep[comp] = (comp_rep['datetime'] - comp_rep[comp]) / np.timedelta64(1, 'D')
    
print(comp_rep.head())

【问题讨论】:

  • 错误是说你可以从datetime64 数组中减去一个浮点数。两个datetimes 相减产生timedelta。可以从 datetime64 中添加或减去 timedelta。我猜comp_rep[comp] 的数据类型错误。
  • 还有……我该如何处理?
  • 我不知道float64 的值是什么,也不知道它应该如何表示时间或时间增量。

标签: python pandas numpy machine-learning


【解决方案1】:

试试这个,它对我有用:

for comp in components:
    comp_rep[comp] = (comp_rep["datetime"] - pd.to_datetime(comp_rep[comp])) / np.timedelta64(1, "D") comp_rep.head()

【讨论】:

    猜你喜欢
    • 2019-10-23
    • 1970-01-01
    • 2020-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-28
    • 1970-01-01
    相关资源
    最近更新 更多