如何从Google Sheets导入多数据集到Pandas DataFrame并解决重复问题
解决Google Sheets多数据集导入问题
问题根源
你遇到的核心问题是重复使用了未重新赋值的工作表变量,或是导入第二个表格时未正确指定新的表格ID与目标工作表。你的第一段代码里甚至缺失了worksheet变量的定义(比如worksheet = sheet.get_worksheet(0)或worksheet = sheet.worksheet("工作表名称")),后续导入时若未重新定义对应第二个表格的worksheet,自然会复用之前的数据集。
修复方案:模块化导入逻辑
把导入逻辑封装成函数,每次导入新表格时传入对应表格ID和工作表名称/索引,彻底避免变量复用问题:
import gspread import pandas as pd from google.oauth2.service_account import Credentials # 初始化认证(只需执行一次) scopes = ["https://www.googleapis.com/auth/spreadsheets"] creds = Credentials.from_service_account_file("你的API密钥文件名.json", scopes=scopes) client = gspread.authorize(creds) def import_sheet_to_df(sheet_id, worksheet_name_or_index): """ 导入指定Google表格的工作表为DataFrame :param sheet_id: Google表格的ID(从URL中提取) :param worksheet_name_or_index: 工作表名称(字符串)或索引(从0开始计数) :return: 对应数据集的DataFrame """ sheet = client.open_by_key(sheet_id) if isinstance(worksheet_name_or_index, int): worksheet = sheet.get_worksheet(worksheet_name_or_index) else: worksheet = sheet.worksheet(worksheet_name_or_index) return pd.DataFrame(worksheet.get_all_records()) # 导入第一个数据集 faculty_df = import_sheet_to_df("第一个表格的ID", "教职工数据表") # 导入第二个数据集 students_df = import_sheet_to_df("第二个表格的ID", 0) # 用索引0表示表格的第一个工作表
更简洁的替代方案:直接用pandas读取
如果你的Google表格已设置为公开可查看(或通过认证权限可访问),可以跳过gspread,直接用pandas读取表格的CSV导出链接:
import pandas as pd def import_sheet_to_df(sheet_id, worksheet_gid): # worksheet_gid可从表格URL的gid参数中获取 url = f"https://docs.google.com/spreadsheets/d/{sheet_id}/export?format=csv&gid={worksheet_gid}" return pd.read_csv(url) # 示例导入 faculty_df = import_sheet_to_df("第一个表格ID", 12345678) students_df = import_sheet_to_df("第二个表格ID", 98765432)
关键注意事项
- 确保每个表格的ID正确(从Google Sheets URL的
d/[表格ID]/部分提取) - 使用服务账号认证时,需将服务账号邮箱添加为对应表格的协作者
- 若工作表名称含特殊字符,优先使用索引或gid参数获取工作表
内容的提问来源于stack exchange,提问作者KrisK
相关产品推荐
相关产品推荐

