UFuncTypeError:ufunc'subtract'不能使用类型为dtype('<M8 [ns]')和dtype('float64')的操作数

时间:2020-09-09 19:30:17

标签: python pandas numpy machine-learning

当我解决此错误时,有一些函数可以解决此问题,ufunc'subtract'无法使用类型为dtype('

7 enter 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())

1 个答案:

答案 0 :(得分:0)

尝试一下,它对我有用:

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