在写毕设的过程中,每次使用kmeans聚类后,得到带有标签的DataFrame的数据,想要将它们保存在一个Excel文件的不同sheet,但是网上找到的资料要么覆盖掉了,要么各种报错。
包括但不仅限于:
ValueError: Sheet '转速' already exists and if_sheet_exists is set to 'error'.
raise IndexError("At least one sheet must be visible")IndexError: At least one sheet must be visible
raise BadZipFile("File is not a zip file")zipfile.BadZipFile: File is not a zip file
raise KeyError(KeyError: "There is no item named '[Content_Types].xml' in the archive"
等等各种奇奇怪怪的错误,顺着这些报错再去找解决方法,又是各种报错。关于这些报错,我的能力有限没能解决,这里没有解决方法。
不过试到最后,我跑通了一个稍微有点复杂但能实现上面目的的代码。
主要思路是:先在一个文件夹里保存生成的多个Excel表格(每个表格的名字就是这个系统的名称),再把这个文件夹里的Excel表格合成到一个excel表格中,不同的文件名就是sheet名。再过河拆桥,把那些没用的文件删了。(很简单的思路吧)
#这是那个需要循环使用的大冤种计算程序
def kmeans_julei(Data ,system_name):
#这里省略Data计算过程
#保存到excel。【这里原本想做成每次生成的数据都添加到一个xlsx文件的同sheet中,但没能成功】 迂回战术:先生成多个表格,再将它们总和到一xlsx里。
#将各个excel表格先放进一个文件夹里。
folder_path = 'D:\\XX\\XX\\XX\\temporary' #文件夹路径
file_name = system_name + ".xlsx" # 输出文件名
file_path = os.path.join(folder_path, file_name)
Data_with_label.to_excel(file_path) #然后就会发现那个文件夹路径里出现了需要的一系列excel表格
#这个好像叫main过程,先这样写了
DATA = pd.read_excel(r'shuju.xlsx')
system_names = ["1111","2222","3333"]
all_dict = {"1111":['A'],'2222':['B', 'C'],'3333': ['E','F']}
for system_name in system_names:
print("开始",system_name)
features = all_dict[system_name] #该系统下所选取的特征
Data = DATA[features] #Data是Dataframe结构(带有标题)。只包括了所需要的特征
kmeans_julei(Data, system_name)
#生成最后的总合excel。(将多个 Excel 表合并到一个 Excel 表中的不同 sheet 里)
folder_path = 'D:\\XX\\XX\\XX\\temporary' # 文件夹路径
output_file = 'output.xlsx' # 输出文件名
writer = pd.ExcelWriter(output_file)
for file in os.listdir(folder_path):
if file.endswith('.xlsx'):
file_path = os.path.join(folder_path, file)
df = pd.read_excel(file_path)
sheet_name = os.path.splitext(file)[0]
df.to_excel(writer, sheet_name=sheet_name)
os.remove(file_path) # 删除原文件
writer.close() #碎碎念:之前按网上写的witer.save()一直报错。查了篇文章说因为pandas升级。writer.save()接口已经私有化,调用close()即可。
print("已完成!耶")
第一次写文章,自娱自乐叭~
本人很菜,初学者,如有错误,你也打不着我。(不过我今天一下午整这个是实现了的)