我有一個回圈運行 'n' 次并在每次迭代中生成 1 個新資料幀。每次迭代結束時創建新資料框時,如何自動創建新的 Google 作業表(在同一個作業簿中)?
我使用此代碼將一個資料框寫入已由我手動創建的 Google 表格:
#將一個資料框寫入 Google 表格的代碼:
cell_range_insert= 'B7'
values = df1.to_json()
body = {'values': values}
response_date= service.spreadsheets().values().append(
spreadsheetId=spreadsheet_id,
valueInputOption='RAW',
range=cell_range_insert,
body=dict(
majorDimension= 'ROWS',
values=df1.T.reset_index().T.values.tolist()
)
).execute()
#在每次迭代中生成一個資料幀的代碼:
Ticker_List= ["AAPL", "GOOG", "AMZN"]
for Ticker in Ticker_List:
values = [['=GOOGLEFINANCE("' str(Ticker) '", "ALL", "1/1/2014", "2/6/2018" ,"DAILY")']]
cell_range_insert = 'B7'
body = {'values': values}
#Send formula to Google Sheet
service.spreadsheets().values().update(
spreadsheetId=spreadsheet_id,
valueInputOption='USER_ENTERED',
range=cell_range_insert,
body=body
).execute()
# Readback stock data from Google Sheets:
response = service.spreadsheets().values().get(
spreadsheetId=spreadsheet_id,
majorDimension='ROWS',
range='Sheet1'
).execute()
# Readback data from Google Sheets and assign it to dataframe df:
columns = response['values'][1]
data = response['values'][2:]
df = pd.DataFrame(data, columns=columns)
uj5u.com熱心網友回復:
在您的情況下,以下流程如何。
- 使用 batchUpdate 方法插入新作業表并將公式放入每個新作業表的單元格“B7”中。
- 使用 values.batchGet 方法從每個新作業表中檢索值。
當這個流程反映在你的腳本中時,它變成如下。
修改后的腳本:
spreadsheet_id = "###" # Please set your Spreadsheet ID.
requests = []
Ticker_List = ["AAPL", "GOOG", "AMZN"]
start_sheet_id = 123456
for i, Ticker in enumerate(Ticker_List):
sheet_id = start_sheet_id i
formula = '=GOOGLEFINANCE("' str(Ticker) '", "ALL", "1/1/2014", "2/6/2018" ,"DAILY")'
requests.extend(
[
{"addSheet": {"properties": {"title": Ticker, "sheetId": sheet_id}}},
{
"updateCells": {
"start": {"sheetId": sheet_id, "rowIndex": 6, "columnIndex": 1},
"rows": [
{
"values": [
{"userEnteredValue": {"formulaValue": formula}}
]
}
],
"fields": "userEnteredValue",
}
},
]
)
service.spreadsheets().batchUpdate(spreadsheetId=spreadsheet_id, body={"requests": requests}).execute()
time.sleep(5) # This is required to be used.
res = service.spreadsheets().values().batchGet(spreadsheetId=spreadsheet_id, ranges=[f"'{e}'!B7:G" for e in Ticker_List]).execute()
# Put the values to dataframe.
for e in res["valueRanges"]:
values = e["values"]
columns = values[0]
data = values[1:]
df = pd.DataFrame(data, columns=columns)
print(df)
- 運行此腳本時,將插入 3 個新作業表作為
"AAPL", "GOOG", "AMZN". 并將公式放入每個插入作業表的單元格“B7”中。這是使用 batchUpdate 方法運行的。 - batchUpdate 方法完成后,等待 5 秒。在這種情況下,請根據您的實際情況進行調整。10 秒可能是合適的。
- 等待之后,從每個插入的作業表中檢索值。并且,這些值被放入資料框中。
筆記:
- 在此腳本中,使用了 2 個 Sheets API 配額。
- 關于資料框,此腳本來自您的顯示腳本。所以,請根據您的實際情況進行修改。
參考:
- 方法:電子表格.batchUpdate
- 方法:電子表格.values.batchGet
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/477107.html
標籤:Python 熊猫 谷歌应用脚本 谷歌表格 谷歌表格 API
上一篇:基于作業表標準的查找
