gpt4 book ai didi

python - 使用 python/pandas 将数据框写入谷歌表格

转载 作者:行者123 更新时间:2023-12-04 16:26:42 24 4
gpt4 key购买 nike

我正在使用 google 表格来保存共享项目的数据。我使用 Google 的 Sheets API 访问数据,在 python 中对其进行处理,并尝试使用 batchUpdate 更新 Sheets 文件。 , 在函数编写器中。

  • 如果我将此函数数据作为列表传递,它会按预期工作。
  • 如果我传递一个数据帧(如我所愿),我会得到:TypeError: Object of type DataFrame is not JSON serializable
  • 如果我使用 .to_json(),我会得到:

googleapiclient.errors.HttpError: https://sheets.googleapis.com/v4/spreadsheets/XXX/values:batchUpdate?alt=json返回“'data[0].values' (type.googleapis.com/google.protobuf.ListValue) 处的值无效,“{"0":{"0":1},"1":{"0": 2},"2":{"0":3},"3":{"0":4}}""。详细信息:“[{'@type': 'type.googleapis.com/google.rpc.BadRequest', 'fieldViolations': [{'field': 'data[0].values', 'description': '无效值在“数据[0].values”(type.googleapis.com/google.protobuf.ListValue),“{“0”:{“0”:1},“1”:{“0”:2}, 2":{"0":3},"3":{"0":4}}"'}]}]">

任何指针将不胜感激。

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)

最佳答案

我相信你的目标和情况如下。

  • 您想使用带有 Python 的 googleapis 将数据框放入 Google 电子表格。
  • 您已经能够使用 Sheets API 为 Google Spreadsheet 获取和放置值。

为此,这个答案怎么样?

修改点:

  • 我不确定数据框的值。因此,在这个答案中,我想使用以下示例数据框来解释修改点。

         A  B  C
    0 1 2 3
    1 4 5 6
    2 7 8 9
  • 遗憾的是,dataframe 不能直接用于方法“spreadsheets.values.batchUpdate”的请求体。所以在这种情况下,需要从数据帧转换为二维数组。为此,我使用了 tolist()

当您的脚本使用示例数据框进行修改时,它变成如下。

修改后的脚本:

从:
df = [[1, 2, 3, 4]]
writer(df)
至:
sampleValue = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
df = pd.DataFrame(sampleValue, columns=list('ABC'))
values = [df.columns.values.tolist()]
values.extend(df.values.tolist())
writer(values)

备注:

  • 如果您不想包含标题行,请修改如下。
    • 来自

        values = [df.columns.values.tolist()]
      values.extend(df.values.tolist())
    •   values = df.values.tolist()

引用资料:

关于python - 使用 python/pandas 将数据框写入谷歌表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62538506/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com