Pandas多键查找:合并Google Sheets用户模块表与详情表
高效合并Google Sheets数据表的Pandas方案
1. 准备工作
- 安装依赖库:
pip install pandas gspread google-auth - 配置Google Sheets权限:去Google Cloud控制台创建项目并启用Sheets API,下载服务账号密钥JSON文件(命名为
credentials.json),放在代码目录下。
2. 读取两张表数据
import pandas as pd import gspread from google.oauth2.service_account import Credentials # 初始化权限 SCOPES = ['https://www.googleapis.com/auth/spreadsheets', 'https://www.googleapis.com/auth/drive'] creds = Credentials.from_service_account_file('credentials.json', scopes=SCOPES) client = gspread.authorize(creds) # 读取模块完成情况表(df1) spreadsheet = client.open('你的表格名称') worksheet_df1 = spreadsheet.worksheet('df1工作表名') df1 = pd.DataFrame(worksheet_df1.get_all_records()) # 读取用户详细信息表(df2) worksheet_df2 = spreadsheet.worksheet('df2工作表名') df2 = pd.DataFrame(worksheet_df2.get_all_records())
3. 高效合并数据
Pandas的merge是矢量化操作,比Excel数组公式效率高几个数量级,根据你的需求选择合并方式:
- 若要保留所有用户信息(以df2为基准):
# 假设两张表通过`user_id`列关联 merged_df = pd.merge(df2, df1, on='user_id', how='left') - 若只保留两张表共有的用户:
merged_df = pd.merge(df2, df1, on='user_id', how='inner') - 若df1是长格式(每行对应一个用户的一个模块),先转宽格式再合并:
# 转宽格式:以user_id为索引,模块名为列,完成状态为值 df1_wide = df1.pivot(index='user_id', columns='module', values='completed').reset_index() merged_df = pd.merge(df2, df1_wide, on='user_id', how='left')
4. 将结果写回Google Sheets
# 创建结果工作表 worksheet_result = spreadsheet.add_worksheet(title='合并结果表', rows=merged_df.shape[0], cols=merged_df.shape[1]) # 写入数据(含表头) worksheet_result.update([merged_df.columns.tolist()] + merged_df.values.tolist())
核心优势
- 矢量化计算避免了Excel逐行循环的低效,5万行数据处理仅需几秒。
- 代码可重复执行,无需手动维护Excel公式。
内容的提问来源于stack exchange,提问作者Emily
相关产品推荐
相关产品推荐

