gspread - 按列名获取特定列

gspread - get specific columns by column name

我有一个 sheet 结构如下。

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

如何通过列名 return 只显示第 1 列和第 2 列?不是按指数。 使用如下所示的 wks.get_all_values(),它将 return sheet.

的所有列

我的代码:

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'])

希望有人能帮助我。 谢谢

我相信你的目标如下。

  • 您想按 header 个值检索列。
  • 您想使用 python 的 gspread 实现此目的。

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

修改后的脚本:

在此修改中,特定列是从使用 wks.get_all_values() 检索的值中检索的。在这种情况下,使用一个 API 调用。例如,当检索到 header 行后检索特定列时,将检索 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)
  • 当这个脚本运行在你的问题中使用你的示例sheet时,得到以下结果。

      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))]