gpt4 book ai didi

python - 使用 Python 覆盖 Excel 中的工作表

转载 作者:太空宇宙 更新时间:2023-11-04 01:54:27 27 4
gpt4 key购买 nike

我是 Python(和一般编程)的新手,在将数据写入 Excel 工作表时遇到问题。

我正在读取一个 Excel 文件,对特定列执行求和计算,然后将结果写入新工作簿。最后,它会根据结果创建两个图表。

代码有效,除了每次我运行它时,它都会创建新的工作表,并在末尾附加数字。我真的只是希望它覆盖我提供的工作表名称,而不是创建新的。

我对所有模块都不够熟悉,无法理解所有可用选项。我研究了 openpyxl 和 pandas,以及与我正在尝试做的事情类似的例子要么不容易找到,要么在我尝试时似乎不起作用。

import pandas as pd
import xlrd
import openpyxl as op
from openpyxl import load_workbook
import matplotlib.pyplot as plt

# declare the input file
input_file = 'TestData.xlsx'

# declare the output_file name to be written to
output_file = 'TestData_Output.xlsx'
book = load_workbook(output_file)
writer = pd.ExcelWriter(output_file, engine='openpyxl')
writer.book = book

# read the source Excel file and calculate sums
excel_file = pd.read_excel(input_file)
num_events_main = excel_file.groupby(['Column1']).sum()
num_events_type = excel_file.groupby(['Column2']).sum()

# create dataframes and write names and sums out to new workbook/sheets
df_1 = pd.DataFrame(num_events_main)
df_2 = pd.DataFrame(num_events_type)
df_1.to_excel(writer, sheet_name = 'TestSheet1')
df_2.to_excel(writer, sheet_name = 'TestSheet2')

# save and close
writer.save()
writer.close()

# dataframe for the first sheet
df = pd.read_excel(output_file, sheet_name='TestSheet1')
values = df[['Column1', 'Column3']]

# dataframe for the second sheet
df = pd.read_excel(output_file, sheet_name='TestSheet2')
values_2 = df[['Column2', 'Column3']]

# create the graphs
events_graph = values.plot.bar(x = 'Column1', y = 'Column3', rot = 60) # rot = rotation
type_graph = values_2.plot.bar(x = 'Column2', y = 'Column3', rot = 60) # rot = rotation
plt.show()

我得到了预期的结果,图表工作正常。我真的只是想让工作表在每次运行时都被覆盖。

最佳答案

来自pd.DataFrame.to_excel文档:

Multiple sheets may be written to by specifying unique sheet_name. With all data written to the file it is necessary to save the changes. Note that creating an ExcelWriter object with a file name that already exists will result in the contents of the existing file being erased.

尝试像这样写书

import pandas as pd
df = pd.DataFrame({'col1':[1,2,3],'col2':[4,5,6]})
writer = pd.ExcelWriter('g.xlsx')
df.to_excel(writer, sheet_name = 'first_df')
df.to_excel(writer, sheet_name = 'second_df')
writer.save()

如果您检查工作簿,您将有两个工作表。

然后假设您想将新数据写入同一个工作簿:

writer = pd.ExcelWriter('g.xlsx')
df.to_excel(writer, sheet_name = 'new_df')
writer.save()

如果您现在检查工作簿,您将只有一个名为 new_df 的工作表

如果您希望保留 excel 文件中的其他工作表并覆盖所需的工作表,则需要使用 load_workbook

在写入任何数据之前,您可以删除要写入的工作表:

std=book.get_sheet_by_name(<sheee_name>)
book.remove_sheet(std)

这将停止在您尝试编写具有重复工作表名称的工作簿时将数字附加到工作表名称的行为。

关于python - 使用 Python 覆盖 Excel 中的工作表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57167907/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com