如何让Python在每次运行程序时在excel中添加新行?

如何让Python在每次运行程序时在excel中添加新行?,python,excel,pandas,pycharm,xlsxwriter,Python,Excel,Pandas,Pycharm,Xlsxwriter,我有一个函数,它从沙盒api收集数据,并使用pandas和xlsxwriter组合将这些数据写入ecxel表。我的问题是如何让Python在每次运行程序时将新数据写入新行?现在,每次我重新运行程序时,它都会覆盖旧数据 这是我的代码: import pandas as pd import xlsxwriter import requests def collection(): api_url = f'https://sandbox.millistream.com/mws.fcgi?usr=san

我有一个函数,它从沙盒api收集数据,并使用pandas和xlsxwriter组合将这些数据写入ecxel表。我的问题是如何让Python在每次运行程序时将新数据写入新行?现在,每次我重新运行程序时,它都会覆盖旧数据

这是我的代码:

import pandas as pd
import xlsxwriter
import requests

def collection():
api_url = f'https://sandbox.millistream.com/mws.fcgi?usr=sandbox&pwd=sandbox&cmd=quote&list=39970\
&fields=symbol,name,diff1dprc,lastprice,time&orderby=symbol&order=asc&timezone=Europe/Oslo&filetype=json'
data = requests.get(api_url).json()

my_columns = ['Time', 'Stocks price']
final_dataframe = pd.DataFrame(columns=my_columns)

final_dataframe = final_dataframe.append(
    pd.Series(
        [
            data[2]['time'],
            data[2]['lastprice']
        ],
        index=my_columns),
    ignore_index=True
)

writer = pd.ExcelWriter('Testing.xlsx', engine='xlsxwriter')
final_dataframe.to_excel(writer, 'AKER', index=False)

background_color = '#000000'
font_color = '#E8130F'

string_format = writer.book.add_format(
{
'font_color': font_color,
'bg_color': background_color,
'border': 1
}
)
dollar_format = writer.book.add_format(
{
'num_format': '$0.00',
'font_color': font_color,
'bg_color': background_color,
'border': 1
}
)

writer.sheets['AKER'].set_column('A1:A506', 20, string_format)
writer.sheets['AKER'].set_column('B1:B506', 10, dollar_format)
writer.save()
这是Excel中的返回:

这就是我想要的回报:
您正在覆盖数据,因为每次运行脚本时,您都在创建一个新的空数据框,并将数据附加到该数据框中。您需要做的是首先加载现有文件,将数据附加到该文件中,保存并重复

所以在代码中替换第11行

final_dataframe = pd.DataFrame(columns=my_columns)

我运行了几次程序,得到了您想要的输出:


最后,您将一直格式化列A,直到达到最大行。这不是什么大问题,但是有更优雅的方法可以只格式化包含数据的行。

回答了您的问题吗?不完全正确。主要的问题是,当我再次运行程序时,新数据只是重写旧数据。因此,我必须找到一种方法来保存旧数据,并将新数据添加到新行。谢谢!如何建议您和我仅格式化包含数据的行?例如,对于第一列,将第45行writer.sheets['AKER']替换为。对于范围(0,final_dataframe.shape[0])中的行,将_列('A1:A506',20,string_format)设置为workbook=writer.book worksheet=writer.sheets['AKER']col=0:worksheet.write(行+1,列,最终数据帧.iloc[行,列],字符串格式)
final_dataframe = pd.read_excel('Testing.xlsx')