在循环中将多个 DataFrame 对象写入同一个 Excel 文件的不同 sheet 中

您所在的位置:网站首页 excel如何将两个不同的名字关联 在循环中将多个 DataFrame 对象写入同一个 Excel 文件的不同 sheet 中

在循环中将多个 DataFrame 对象写入同一个 Excel 文件的不同 sheet 中

2023-05-20 09:08| 来源: 网络整理| 查看: 265

        在写毕设的过程中,每次使用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("已完成!耶")

第一次写文章,自娱自乐叭~

本人很菜,初学者,如有错误,你也打不着我。(不过我今天一下午整这个是实现了的)



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3