我有以下功能:
def interpolate_values(A):
''' fills values between pairs of events'''
if type(A) ==list :
A= np.array(A)
ok = ~pd.isna(A)
xp = ok.nonzero()[0]
fp = A[~pd.isna(A)]
x = pd.isna(A).nonzero()[0]
A[pd.isna(A)] = np.interp(x, xp, fp)
A = [round(i) for i in A]
return A
产生以下错误:
TypeError: Cannot cast array data from dtype('O') to dtype('float64') according to the rule 'safe'
指向该行:
A[pd.isna(A)] = np.interp(x, xp, fp)
A从以下函数传递:
def generate_appliance_powerseries(appliance_pairs,DelP):
''' generates full power series of appliances'''
print ("3 of 6> generates full power series of appliances")
appliance_signatures = OrderedDict()
power_series = OrderedDict()
ctlf = OrderedDict()
for i in range(len(appliance_pairs)):
events = appliance_pairs[i]
timeseq= []
powerseq = []
for event in events:
start= event[0]
end = event[1]
duration = end - start
instance = []
instance.append([DelP[start]])
temp= np.repeat(np.nan,duration-1).tolist()
instance.append(temp)
instance.append([abs(DelP[end])])
final = [j for sub in instance for j in sub]
timeval = range(start,end+1,1)
#print (event)
powerval = interpolate_values(final) if sum(pd.isna(final)) else final
timeseq.append(timeval)
powerseq.append(powerval)
powerseq = [j for sub in powerseq for j in sub]
timeseq = [j for sub in timeseq for j in sub]
power_series[i] = pd.DataFrame({'timestamp':timeseq,'power':powerseq})
appliance_signatures[i] = pd.DataFrame(powerseq)
return power_series, appliance_signatures
有人知道问题出在哪里吗? 如果需要其他信息,请告诉我
在简单浮点数组上运行函数:
但是如果我将
A
更改为object
dtype(如果从数据帧派生,则可能是这种情况):实际上,强制转换代码在
interp_func
中,但这显然是编译代码,因此没有向我们提供它试图强制转换的更多细节我们可以通过添加打印行获得更多信息:
x
和xp
是相同的,但fp
已更改为object
数据类型。它不能对object
值执行数字插值;它们必须是float
相关问题 更多 >
编程相关推荐