如何在不删除其他工作表的情况下将数据框保存到excel工作表中?
我想从股票市场中提取一些数据,并将它们保存在不同的excel文件中。每个股票交易过程都有不同的时间框架,比如100万、300万、500万、1500万等等。。 我想为每个股票创建一个excel文件,并为每个时间段创建不同的工作表 我的代码为如何在不删除其他工作表的情况下将数据框保存到excel工作表中?,excel,python-3.x,pandas,Excel,Python 3.x,Pandas,我想从股票市场中提取一些数据,并将它们保存在不同的excel文件中。每个股票交易过程都有不同的时间框架,比如100万、300万、500万、1500万等等。。 我想为每个股票创建一个excel文件,并为每个时间段创建不同的工作表 我的代码为股票(符号)创建excel文件,并在其中添加工作表(1m、3m、5m…),保存文件,然后从股票市场api提取数据并保存到正确的工作表中。如ETH/BTC,创建文件和工作表,拉取“1m”数据并保存到“1m”工作表中 代码创建文件和工作表,我对其进行了测试。 问题是
股票(符号)
创建excel文件,并在其中添加工作表(1m、3m、5m…
),保存文件,然后从股票市场api提取数据并保存到正确的工作表中。如ETH/BTC,创建文件和工作表,拉取“1m”数据并保存到“1m”工作表中
代码创建文件和工作表,我对其进行了测试。
问题是,将dataframe写入excel文件后,它会删除所有其他工作表。我试图提取每个符号的所有数据。但当我打开excel文件时,只写入了最后一个时间段(1w)
,所有其他工作表都被删除。所以请帮忙
我检查了其他问题,但没有发现相同的问题。在最后一部分中,我并没有尝试添加一个新的工作表,而是尝试将df保存到现有的工作表中
#get_bars function pulls the data
def get_bars(symbol, interval):
.
.
.
return df
我认为与其将
ExcelWriter
定义为变量,不如在With
语句中使用它,并使用append模式
,因为您已经使用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])
在上面的代码中,您在xrpudt
变量中使用了一个静态间隔“1m”,该变量在该代码中变为变量
资源:
ExcelWriter:在这里您可以看到附加模式的用例
如何写入excel:在这里您可以看到如何写入多张工作表
嗨,谢谢你这么快就回答了。我试过你的解决办法。但它给出了一个错误:ValueError:xlsxwriter不支持追加模式
我搜索了这个错误,找到了一个解决方案,并将其添加到您的代码中:使用pd.ExcelWriter(file,engine='openpyxl'mode='a')作为编写器:
xrpudt.to_excel(writer,sheet_name='1m')
但是使用这一行创建了文件和工作表,但创建了另一个名为:“1m1”的工作表,其中包含数据框。然后我再次检查了代码,删除了:for x in range(len(timeseries)):
循环,并将其重写如下:for x in range(len(timeseries)):
xrpudt=get_bar(symbol,interval=timeseries[x])
与pd.ExcelWriter(文件,engine='openpyxl',mode='a')作为编写者:
xrpusdt.to_excel(编写者,工作表名称=timeseries[x])
使用这些行代码创建文件并附加名为“1m”、“3m”、“5m”、“15m”的新工作表。。。其中包含数据帧。这对我很有效。谢谢你给我带路。但奇怪的是,我无法将数据框写入excel文件中的现有工作表中。再次感谢。(很抱歉没有正确定位代码,我是该网站的新手。)谢谢@milikest。我已相应地更正了答案
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])