当我解决这个错误时,有一些函数可以解决这个问题,ufunc“subtract”不能使用类型为 dtype ('<M8 [ns]') 和 dtype ('float64') 的操作数,或者该程序工作的另一种方式并给出我以下数据:import pandas as pdmaint = 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 colunacomp_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 回答

万千封印
TA贡献1891条经验 获得超3个赞
试试这个,它对我有用:
for comp in components: comp_rep[comp] = (comp_rep["datetime"] - pd.to_datetime(comp_rep[comp])) / np.timedelta64(1, "D") comp_rep.head()
添加回答
举报
0/150
提交
取消