1.dataframe增删
#创建空的新dataframe train_FD001是个人数据,是已创建好的dataframe
columns_last=train_FD001.columns
loc_data2=pd.DataFrame(columns=columns_last)
#本人切片的条件可以忽略 RUL_FD001是datafrme类型,也涉及到dataframe转list
list_rul=list(numpy.array(RUL_FD001.values).flat)
i=unit_first
while i<=unit_last:
loc_data2=loc_data2.append(train_FD001.loc[(train_FD001.unit_number==i)&(train_FD001.time_in_cycles==list_rul[i-1])], ignore_index=True)
#坑1 必须df=df.append 虽然前面删除遇到过这个坑但是这次添加又忘记了
#另:注意切片的列和被添加的列相同
2.append会将增加的列中int64类型模糊成object类型
max_loc=loc_data2.describe().max()
min_loc=loc_data2.describe().min()
columns_last=columns_last.drop(['unit_number','time_in_cycles'])
f={}
for colu in columns_last:
differ=max_loc[colu]-min_loc[colu]
#本人代码这一行报错,因为loc_data2中有一列被模糊成了obeject类型,因此describe方法忽略了该列
#而列标签中却还有这一列,所以会出现键错误
sum_j=max_loc[colu]+min_loc[colu]
f_i=(differ/(sum_j/2))/c[colu]
f[colu]=f_i
解决方案
loc_data2=loc_data2.infer_objects()
#infer_objects()方法会将object类型再推断为int64类型
#还是 df=df.方法 这个坑要注意在dataframe的各种处理中
max_loc=loc_data2.describe().max()
min_loc=loc_data2.describe().min()
columns_last=columns_last.drop(['unit_number','time_in_cycles'])
f={}
for colu in columns_last:
differ=max_loc[colu]-min_loc[colu]
sum_j=max_loc[colu]+min_loc[colu]
f_i=(differ/(sum_j/2))/c[colu]
f[colu]=f_i