with pd.ExcelWriter(f"./handling_data/处理后的数据.xlsx", 'openpyxl') as writer1:
for i in range(0, 5):
# 先建立文件夹
datas = pd.read_excel(fp, sheet_name=i, parse_dates=True, dtype={"value": np.float32})
os.makedirs(f"./grouped/{i}",exist_ok=True)
# 调用函数并打印结果
bads = find_explict_abnormal_data(datas)
# print(f"{bads.__len__()} abnormal datas:\n{datas.iloc[bads]}")
#准备保存文件到csv文件中。
datas.drop(columns='diff',inplace=True)
#print(f"saving {i}")
# 按小时和weekday分组
for (label1,df1),(label2,df2) in zip(_group_by_hour(5,datas.drop(index=datas.index[bads])).items(), _group_by_weekday(data=datas.drop(index=datas.index[bads])).items()):
df1.to_csv(f"./grouped/{i}/{label1}.csv",index=False,compression=None)
df2.to_csv(f"./grouped/{i}/{label2}.csv",index=False,compression=None)
# 输出
datas['bad'] = False
datas.loc[bads,'bad'] = True
_L.acquire()
datas.iloc[extended_abnormal_data(datas.shape[0],bads,2)].to_excel(writer1,sheet_name=f'{i}表异常数据表及周围2个',index=False)
datas.drop(labels=bads,inplace=False).to_excel(writer1,sheet_name=f'表{i}正常数据',index=False)
_L.release()
fp.close()
这是我修改后不覆盖的,覆盖的原因是把excelWriter放在for循环里面,我觉得是因为excelWriter有个记忆当前sheet的东西,前后语境关了之后这个东西重置,所以如果你放循环内,就会一直重置,一直覆盖,所以把这个逻辑写到外面就好了。