【问题标题】:gspread - get specific columns by column namegspread - 按列名获取特定列
【发布时间】:2021-10-21 13:17:41
【问题描述】:

我有一张带有以下结构的表格。

COLUMN1 | COLUMN2 | COLUMN3
0       | 3       | 1
1       | 3       | 
2       | 5       | 4
4       | 2       | 2

如何仅通过列名返回第 1 列和第 2 列?不是按索引。 使用如下所示的 wks.get_all_values(),它将返回工作表的所有列。

我的代码:

ss = gs.open(args['name'])
wks = ss.worksheet(args['worksheet'])
data = wks.get_all_values()
headers = data.pop(0)
df = pd.Dataframe(data, columns=headers)

我需要类似的东西,wks.get_columns(['COLUMN1','COLUMN2'])

我希望有人可以帮助我。 谢谢

【问题讨论】:

  • 您是专门寻找脚本解决方案吗?这可以通过一个 FILTER 公式轻松完成。如果您对公式方法感兴趣,为了实现最大效率,请提供实际工作表名称和可能包含的所有列(例如 A:Z)。

标签: python google-sheets google-sheets-api gspread


【解决方案1】:

我相信你的目标如下。

  • 您希望按标题值检索列。
  • 您想使用 gspread for python 来实现这一点。

这样的话,下面的修改怎么样?

修改脚本:

在此修改中,从使用wks.get_all_values() 检索的值中检索特定列。在这种情况下,使用一个 API 调用。例如,在检索标题行之后检索特定列时,将检索 2 个 API 调用。所以我提出了这个方法。

headers = ["COLUMN1", "COLUMN3"] # Please set the header values you want to retrieve.

ss = gs.open(args['name'])
wks = ss.worksheet(args['worksheet'])
values = wks.get_all_values()
data = zip(*(e for e in zip(*values) if e[0] in headers))
df = pd.DataFrame(data, columns=headers)
  • 当使用您的问题中的示例表运行此脚本时,将获得以下结果。

      0  COLUMN1  COLUMN3
      1        0        1
      2        1
      3        2        4
      4        4        2
    
  • 当您要检索data作为列表时,请将data = zip(*(e for e in zip(*values) if e[0] in headers))修改为data = [list(f) for f in zip(*(e for e in zip(*values) if e[0] in headers))]

【讨论】:

    猜你喜欢
    • 2011-04-16
    • 2013-05-15
    • 2022-11-02
    • 2021-12-05
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-02
    相关资源
    最近更新 更多