首页 > 解决方案 > 如何在不删除其他工作表的情况下将数据框保存到 Excel 工作表中?

问题描述

我正在尝试从股票市场中提取一些数据并将它们保存在不同的 Excel 文件中。每个股票交易过程都有不同的时间范围,例如 1m、3m、5m、15m 等。我想为每只股票创建一个 excel 文件,并为每个时间范围创建不同的表格。

我的代码为 a 创建 excel 文件stock (symbol)并在其中添加工作表(1m,3m,5m...)并保存文件,然后从股票市场 api 中提取数据并保存到正确的工作表中。如 ETH/BTC,创建文件和表格,拉取“1m”数据并保存到“1m”表格中。

代码创建文件和工作表,我对其进行了测试。问题是在将数据框写入 excel 文件后,它会删除所有其他工作表。我试图提取每个符号的所有数据。但是当我打开excel文件时,只time frame (1w)写了最后一个文件,所有其他工作表都被删除了。所以请帮忙。

我检查了其他问题,但没有发现同样的问题。在最后一部分,我没有尝试添加新工作表,而是尝试将 df 保存到现有工作表。

#get_bars function pulls the data

def get_bars(symbol, interval):
.
.
.
return df

...

timeseries=['1m','3m','5m','15m','30m','1h','2h','4h','6h','12h','1d','1w']

from pandas import ExcelWriter
from openpyxl import load_workbook

for symbol in symbols:
    file = ('C:/Users/mi/Desktop/Kripto/' + symbol + '.xlsx')
    workbook = xlsxwriter.Workbook(file)
    workbook.close()
    wb = load_workbook(file)
    for x in range(len(timeseries)):
        ws = wb.create_sheet(timeseries[x])
        print(wb.sheetnames)
        wb.save(file)
        workbook.close()
    xrpusdt = get_bars(symbol,interval='1m')
    writer = pd.ExcelWriter(file, engine='xlsxwriter')
    xrpusdt.to_excel(writer, sheet_name='1m')
    writer.save()

标签: excelpython-3.xpandas

解决方案


我认为ExcelWriter您需要在With语句中使用它并使用它,而不是将其定义为变量,append mode因为您已经使用xlsxwriter如下所示创建了一个 excel 文件

for x in range(len(timeseries)): 
    xrpusdt = get_bars(symbol,interval=timeseries[x]) 
with pd.ExcelWriter(file,engine='openpyxl', mode='a') as writer: 
    xrpusdt.to_excel(writer, sheet_name=timeseries[x])

在上面的代码中,您在变量中使用静态间隔作为“1m”,该xrpusdt变量在此代码中更改为变量。

资源

Pandas ExcelWriter:在这里你可以看到append mode
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.ExcelWriter.html#pandas.ExcelWriter的用例

Pandas df.to_excel:在这里您可以看到如何写入多张纸
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_excel.html


推荐阅读