我正在使用Google表格来保存一个共享项目的数据。使用Google的Sheets API,我可以访问数据,在Python中处理它,并尝试在函数writer中使用batchUpdate更新Sheets文件。
任何指针都将不胜感激。
- 如果我将数据作为列表传递给该函数,则按预期工作。
- 如果我传递一个数据框(正如我所希望的那样),我会收到以下错误:
TypeError:类型为DataFrame的对象无法进行JSON序列化
- 如果我使用
.to_json()
,则会得到以下结果:
任何指针都将不胜感激。
import pickle
import os.path
import pandas as pd
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
from pprint import pprint
# If modifying these scopes, delete the file token.pickle.
SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
# Spreadsheet ID: https://docs.google.com/spreadsheets/d/XXX/edit#gid=0
SPREADSHEET_ID = 'XXX'
RANGE_NAME = 'contacts'
def writer(df):
service = build('sheets', 'v4', credentials=gsheet_api(SCOPES))
sheet_name = 'contacts'
data = [{'range' : sheet_name, 'values' : df}]
batch_update_values_request_body = {
'value_input_option': 'RAW',
'data': data }
request = service.spreadsheets().values().batchUpdate(spreadsheetId=SPREADSHEET_ID,
body=batch_update_values_request_body)
response = request.execute()
pprint(response)
df = [[1, 2, 3, 4]]
writer(df)
TypeError: Object of type Timestamp is not JSON serializable
,请先将相关字段转换为'str'
:df = df.astype('str')
(将转换所有列)。 - conor