如何通过 gspread 获取 Google sheet 的前 300 行

How to get first 300 rows of Google sheet via gspread

设置

我像这样从 google sheet 中的所有记录创建一个 Pandas 数据框,

df = pd.DataFrame(wsheet.get_all_records())

Gspread docs 中所述。


问题

从今天开始执行命令的时候,好像Python一直卡住了。我没有收到任何错误;过了一会儿,我用 KeyboardInterrupt 打断了 Python。

我怀疑Google发现记录太多; ±3500 行 18 列。


问题

现在,我其实并不真的需要整个 sheet。前 300 行就可以了。

文档显示 values_list = worksheet.row_values(1),这将 return 列表中的第一行值。

我想我可以创建一个循环,但我想知道是否有内置/更好的解决方案?

我使用了 openpyxl 包。

import openpyxl as xl

wb = xl.load_workbook('your_file_name')>
sheet = wb['name_of_your_sheet']

指定范围。
for row in range(1, 300):

现在您可以执行许多操作,例如这将在第一次迭代中指向 row(1) 和 col(3)
cell = sheet.cell(row, 3)

如果要更改单元格值
cell.value = 'something'

它几乎应有尽有。 这是文档的 link:https://openpyxl.readthedocs.io/en/stable/

我相信你的目标如下。

  • 您想从 Google Spreadsheet 中的 sheet 检索第 1 行到第 300 行的值。
    • I suspect Google finds the records too much; ±3500 rows with 18 columns. 开始,您想检索“A”到“R”列的值吗?
  • 您想将检索到的值转换为数据帧。
  • 您想使用 gspread 实现此目的。

为了实现这一点,我想提出以下示例脚本。

在这个回答中,我使用了values_get的方法。

示例脚本:

spreadsheetId = "###"  # Please set the Spreadsheet ID.
rangeA1notation = "Sheet1!A1:R300"  # Please set the range using A1Notation.

client = gspread.authorize(credentials)
spreadsheet = client.open_by_key(spreadsheetId)
values = spreadsheet.values_get(rangeA1notation)
v = values['values']
df = pd.DataFrame(v)
print(df)

注:

  • 请将范围设置为A1Notation。在这种情况下,当使用“A1:R300”而不是“Sheet1!A1:R300”时,会从 Spreadsheet.

    的第一个选项卡中检索值
  • 当使用“A1:300”时,取值是从“A”列到sheet的最后一列。

  • 当第1行为表头行,数据在第2行之后,请修改如下

    • 来自

        df = pd.DataFrame(v)
      
    •   df = pd.DataFrame(v[1:], columns=v[0])
      

参考: