如何从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()
关键细节说明
- 用
get()替代range():get()方法直接返回单元格的数值列表,无需手动提取Cell对象的value属性,更简洁高效。 - 手动指定表头:将数据的第一行作为
columns参数传入DataFrame,确保表头与数据对应。 - 隐藏索引:打印输出时用
to_string(index=False)去掉索引;Notebook环境可通过全局设置默认隐藏索引。
内容的提问来源于stack exchange,提问作者Rajat Jain
相关产品推荐
相关产品推荐

