跳转到主要内容

一个用于轻松打开Google表格实例并通过Pandas数据框与工作表交互的包。

项目描述

PyPI Version Documentation Status

作者:Diego Fernandez

链接

概述

一个用于轻松打开Google表格实例并通过Pandas数据框与工作表交互的包。它使您能够轻松地将数据从Google表格拉入数据框,以及从数据框将数据推入表格。它在后端利用gspread进行大部分繁重的工作,但它还添加了很多处理特定于数据框工作的功能以及一些额外的贴心功能。

目标受众是数据分析师和数据科学家,但它也可以由数据工程师或任何尝试使用Google Sheets和Pandas自动化工作流程的人使用。

一些主要目标/功能

  • 易于交互式使用,具有良好的docstrings和自动完成

  • 优雅地处理标题和索引(包括多级标题和合并单元格)

  • 在Jupyter、无头服务器和/或脚本上运行

  • 允许存储不同的用户凭证或使用服务帐户

  • 自动处理令牌刷新

  • 启用处理冻结的行和列

  • 在拉取数据时启用所有合并单元格的填充

  • 优雅地处理大数据集和自动重试

  • 启用创建过滤器

  • 当超过100秒用户配额时处理重试

  • 当推送具有MultiIndex列的DataFrames时,允许合并或扁平化标题

  • 处理电子表格权限的能力

  • 能够指定特定列的ValueInputOptionValueRenderOption

安装/使用

使用pip进行安装

$ pip install gspread-pandas

或克隆仓库

$ git clone https://github.com/aiguofer/gspread-pandas.git
$ python setup.py install

在开始使用之前,您需要下载您应用的Google客户端凭据。

客户端凭据

为了允许脚本使用Google Drive API,我们需要向Google进行身份验证。为此,我们需要创建一个项目,描述工具并生成凭据。请使用您的网络浏览器并访问Google控制台

  • 在顶部弹出菜单中选择创建项目

  • 会出现一个对话框,因此为您的项目命名并点击创建按钮。

  • 在左侧菜单中点击API管理器

  • 显示可用API的表格。切换到Drive API并点击启用API按钮。对Sheets API也执行相同的操作。其他API可能被关闭,对我们来说无关紧要。

  • 在左侧菜单中点击凭据

  • OAuth同意屏幕部分选择您的电子邮件地址并为您的产品命名。然后点击保存按钮。

  • 凭据部分点击添加凭据并切换到OAuth客户端ID(如果您想使用自己的账户或启用多个账户的使用)或服务账户密钥(如果您更喜欢服务账户与电子表格交互)。

  • 如果您选择OAuth客户端ID

    • 应用程序类型项设置为桌面应用程序并为其命名。

    • 点击创建按钮。

    • 点击创建的OAuth客户端ID右侧的下载JSON图标并将下载的文件存储在您的文件系统中。

  • 如果您选择服务账户密钥

    • 点击服务账户下拉菜单并选择新建服务账户

    • 为其提供服务账户名称并忽略角色下拉菜单(除非您知道您需要它用于其他目的,它对于与电子表格交互不是必需的)

    • 注意服务账户ID,因为您可能需要为此用户分配与您的电子表格交互的权限

    • 密钥类型保留为JSON

    • 点击创建并将下载的文件存储在您的文件系统中。

  • 请注意,该文件包含您的私人凭据,因此请像对待您的私人SSH密钥一样小心处理该文件;将下载的JSON移动到~/.config/gspread_pandas/google_secret.json(或者您可以直接通过调用gspread_pandas.conf.get_config来配置目录和文件名)

感谢类似项目df2gspread提供了如何获取客户端凭据的出色描述。

您可以在配置文档中了解更多信息,包括如何更改默认行为。

示例

import pandas as pd
from gspread_pandas import Spread, Client

file_name = "http://stats.idre.ucla.edu/stat/data/binary.csv"
df = pd.read_csv(file_name)

# 'Example Spreadsheet' needs to already exist and your user must have access to it
spread = Spread('Example Spreadsheet')
# This will ask to authenticate if you haven't done so before

# Display available worksheets
spread.sheets

# Save DataFrame to worksheet 'New Test Sheet', create it first if it doesn't exist
spread.df_to_sheet(df, index=False, sheet='New Test Sheet', start='A2', replace=True)
spread.update_cells('A1', 'B1', ['Created by:', spread.email])
print(spread)
# <gspread_pandas.client.Spread - User: '<example_user>@gmail.com', Spread: 'Example Spreadsheet', Sheet: 'New Test Sheet'>

# You can now first instanciate a Client separately and query folders and
# instanciate other Spread objects by passing in the Client
client = Client()
# Assumming you have a dir called 'example dir' with sheets in it
available_sheets = client.find_spreadsheet_files_in_folders('example dir')
spreads = []
for sheet in available_sheets.get('example dir', []):
    spreads.append(Spread(sheet['id'], client=client))

故障排除

Rodeo中的EOFError

如果您尝试在Rodeo中使用gspread_pandas,在尝试传入验证码时可能会收到EOFError: EOF when reading a line错误。此问题的解决方法是首先在常规shell中验证您的账户。由于您只是做这件事来获取Oauth令牌,因此电子表格不需要有效。只需在shell中运行此命令即可

python -c "from gspread_pandas import Spread; Spread('<user_key>','')"

然后按照说明创建和存储OAuth凭据。

此操作会增加工作簿中单元格的数量,超过10000000个单元格的限制。

国际海事组织认为,Google Sheets 不是处理大量数据集的正确工具。然而,在这种情况下使用它的原因可能很充分。当你上传一个大型DataFrame时,可能会遇到以下错误。

默认情况下,Spread.df_to_sheet 将添加必要的行和/或列以容纳DataFrame。由于新工作表包含相当多的列,如果你上传的DF有大量行,即使你的数据没有,你也可能超出工作表中单元格的最大数量。为了解决这个问题,你有两种选择

  1. 最简单的是传递 replace=True,这将首先调整工作表大小并清除所有值。

  2. 另一种选择是首先使用 Spread.sheet.resize(1, 1) 调整大小到1x1,然后进行 df_to_sheet

调整大小有一些奇怪的限制,因此首先将其调整为1x1是推荐的(replace=True 已经这样做)。了解更多信息请参阅 这个问题

项目详情


发布历史 发布通知 | RSS源

下载文件

下载适用于您平台的应用程序。如果您不确定选择哪个,请了解更多关于 安装软件包 的信息。

源分布

gspread-pandas-3.3.0.tar.gz (29.5 kB 查看哈希值)

上传时间

构建分布

gspread_pandas-3.3.0-py2.py3-none-any.whl (27.3 kB 查看哈希值)

上传时间 Python 2 Python 3

支持者