UFuncTypeError: ufunc 'subtract' non può utilizzare operandi con i tipi dtype ('<M8 [ns]') e dtype ('float64')

Sep 10 2020

Mentre risolvo questo errore, c'è qualche funzione che risolve questo, ufunc 'subtract' non può usare operandi con i tipi dtype ('<M8 [ns]') e dtype ('float64'), o un altro modo in cui questo programma funziona e dà me i seguenti dati:

7 inserisci qui la descrizione dell'immagine

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

Risposte

ViniciusKrebs Oct 04 2020 at 23:46

Prova questo, ha funzionato per me:

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