当前位置: 首页 > 知识库问答 >
问题:

使用python/pandas将数据帧写入google工作表

谭坚诚
2023-03-14

我正在使用谷歌工作表来保存共享项目的数据。我使用Google的Sheets API访问数据,用python处理数据,并尝试在function writer中使用batchUpdate更新Sheets文件。

  • 如果我将此函数数据作为列表传递,它将按预期工作

GoogleapClient。错误。HttpError:

任何指点都将不胜感激。

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)

共有1个答案

仉姚石
2023-03-14

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

  • 你想把数据框到谷歌电子表格使用googleapis与Python。
  • 您已经能够使用工作表API获取和放置Google电子表格的值。

对于这个问题,这个答案如何?

>

     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()
      
      • 方法:电子表格。价值观批量更新

  •  类似资料:
    • 问题内容: 只要工作表不同,就可以很容易地将许多熊猫数据框添加到excel工作簿中。但是,如果要使用内置的df.to_excel功能的熊猫,将许多数据帧放入一个工作表中有些棘手。 上面的代码不起作用。您将得到错误 现在,我已经进行了足够的实验,以至于找到了使之工作的方法。 这会起作用。因此,我将这个问题发布在stackoverflow上的目的是双重的。首先,我希望这对某人在excel中将多个数据框

    • 我有一个名为df的数据库数据帧。我想将它作为csv文件写入S3存储桶。我有S3存储桶名称和其他凭据。我检查了这里给出的在线留档https://docs.databricks.com/spark/latest/data-sources/aws/amazon-s3.html#mount-aws-s3它说使用以下命令 但我有的是数据帧,而不是文件。怎么才能实现?

    • 我在pandas中有一个数据帧,我想把它写到CSV文件中。我使用的是: 并得到错误: 有没有什么方法可以很容易地解决这个问题(例如,我的数据帧中有unicode字符)?还有,有没有一种方法可以使用“to-tab”方法(我认为不存在)写入以制表符分隔的文件,而不是CSV?

    • 问题内容: 我有一个我希望导出到CSV文件的文件。但是,pandas似乎将某些值而不是类型写为。我找不到如何更改此行为。 建立数据框: 查看: 导出它: 为什么十位数有一个零点? 当然,我可以将此函数粘贴到管道中以重新转换整个CSV文件,但似乎没有必要: 问题答案: 我正在寻找的答案与@Jeff在答案中提出的内容略有不同。功劳归于他。最终解决了我的问题,以供参考:

    • 通过itertuples,我需要将位于excel列(“G7”、“G8”)两行中的两个数据导出到google工作表的两列中。我该怎么做? 最后一行不会更新google表单的第3列

    • 我想写数据到我的工作表: 但在日志中我看到: 我做错了什么?我将非常感谢为您提供的示例代码:) 在例子中没有足够的信息(https://developers.google.com/sheets/api/guides/values#writing_to_a_single_range)