You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Google Sheet指定区域生成带正确表头的Pandas DataFrame

解决Google Sheet转Pandas DataFrame的表头与索引问题

你遇到的问题主要是因为直接把range()返回的Cell对象列表转成DataFrame,既没有提取单元格实际数值,也没正确设置表头,导致结果不符合预期。我来帮你调整代码,实现带正确表头、不显示冗余索引的DataFrame:

问题根源

你原代码里的sh5.worksheet_by_title("Pincode - fos").range('E1:K7')返回的是Cell对象的二维列表,不是单元格的实际数值;同时你没有将第一行指定为表头,所以生成的DataFrame格式混乱。

正确实现代码

下面是修正后的完整代码,适配你的需求:

import pandas as pd
import gspread

# 初始化gspread客户端(假设你已完成授权配置)
gc = gspread.service_account()  # 或你使用的其他授权方式

# 打开目标表格并获取工作表
sh5 = gc.open_by_url('你的Google Sheet链接')
worksheet = sh5.worksheet_by_title("Pincode - fos")

# 获取指定区域(E1:K20000)的实际数值,get()方法直接返回值列表
data = worksheet.get('E1:K20000')

# 分离表头和数据行
header = data[0]  # 第一行作为DataFrame的表头
rows = data[1:]   # 剩余行作为数据内容

# 可选:过滤空行(如果数据中存在无内容的空白行)
rows = [row for row in rows if any(cell for cell in row)]

# 创建带正确表头的DataFrame
df = pd.DataFrame(rows, columns=header)

# 查看结果时隐藏索引
print(df.head().to_string(index=False))
# 若在Jupyter Notebook中,可设置全局显示选项默认隐藏索引:
# pd.set_option('display.show_index', False)
# df.head()

关键细节说明

  1. 用get()替代range():get()方法直接返回单元格的数值列表,无需手动提取Cell对象的value属性,更简洁高效。
  2. 手动指定表头:将数据的第一行作为columns参数传入DataFrame,确保表头与数据对应。
  3. 隐藏索引:打印输出时用to_string(index=False)去掉索引;Notebook环境可通过全局设置默认隐藏索引。

内容的提问来源于stack exchange,提问作者Rajat Jain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:21:20