📜  gspread 将数据帧发送到工作表 - Python (1)

📅  最后修改于: 2023-12-03 14:41:39.712000             🧑  作者: Mango

用 gspread 发送 pandas 数据帧到 Google Sheets

对于 Python 开发者来说,gspread 是一个非常好用的 Google Sheets API 客户端库。你可以通过它快速地读取、修改、写入 Google Sheets 的数据。而对于那些想利用 Python 发送数据到 Sheets 的用户来说,gspread 也是一个不错的选择。

首先,我们需要在 Google APIs 控制台中启用 Sheets API,获得一个 Google API 令牌。你可以参考这篇 gspread 官方文档 来进行操作。

在安装了 gspread 库后,你需要使用你的 API 令牌和密钥来建立一个连接。接着,你可以通过打开一个工作表,以及选择需要操作的工作表来创建一个 gspread.Spreadsheet 实例,然后就可以在这个实例上进行读写操作了。

但是,当你想要发送一个 pandas 数据帧到 Google Sheets 时,你需要进行一些额外的操作。以下是这个过程中需要的步骤:

  • 将数据帧转换为一个二维数组,这可以通过将数据帧中的值转换为一个嵌套的列表来实现(即 df.values.tolist());
  • 创建一个与数据帧大小相同的工作表。这可以通过使用 gspread.Worksheet 的 update() 方法来实现,该方法可以在当前工作表的指定单元格区域中写入值。更新之前,你则需要在工作表中创建一个具有正确行/列数量的区域;
  • 写入数据。可以通过在工作表区域的左上角单元格开始写入(例如 A1)来实现;

以下是一些代码片段,可用于实现上述步骤:

import pandas as pd
import gspread
from oauth2client.service_account import ServiceAccountCredentials

# set up Google Sheets API credentials
scope = ["https://spreadsheets.google.com/feeds",
         "https://www.googleapis.com/auth/drive"]
credentials = ServiceAccountCredentials.from_json_keyfile_name(
    'path_to_your_api_token.json', scope)
gc = gspread.authorize(credentials)

# open a spreadsheet named 'my sheet'
sh = gc.open('my sheet')

# create a new worksheet named 'data sheet'
worksheet = sh.add_worksheet(title="data sheet", rows=10, cols=5)

# example pandas dataframe
df = pd.DataFrame({"a": [1, 2, 3], "b": [4, 5, 6]})

# convert the dataframe to a list of lists
data = df.values.tolist()

# write the data to the worksheet
cell_list = worksheet.range('A1:C3')  # this should match the size of your data
for i, cell in enumerate(cell_list):
    cell.value = data[i // 3][i % 3]
worksheet.update_cells(cell_list)

可以看到,这里创建了一个新的名为“data sheet”的工作表,并将 df 转换为一个列表,然后将其写入到单元格区域'A1:C3'中。

需要注意的是,在更新单元格值的时候,每个线程实例通过单个网络请求来发送多个单元格值更新。这意味着在这个例子中,整个数据区域必须分配到 cell_list 中,并一次性发送到 API。如果你需要更新大量数据,则可能需要分批进行发送,你可以查看 gspread官方文档 获取更多相关信息。

希望这些代码片段可以帮助你在使用 gspread 发送 pandas 数据帧到 Google Sheets 时更方便地实现。