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

如何传递多个Google Analytics View ID并将数据合并为单个DataFrame

Google Analytics 多视图数据批量拉取合并方案

你当前的代码存在2个核心问题:

  1. GA Reporting API v4的reportRequests参数要求每个查询视图对应一个独立的请求对象,不能把多个viewId塞到同一个请求的viewId字段里
  2. 缺少把GA返回的结构化数据解析为表格、再合并多个视图数据的逻辑

实现步骤

1. 修正批量请求构造逻辑

每个View ID对应一个reportRequest对象,一次性提交批量请求,比循环单个请求效率更高。

2. 编写GA返回结果解析函数

把API返回的嵌套格式转换为pandas DataFrame,同时额外新增view_id字段区分不同区域的数据。

3. 合并所有视图数据为单个DataFrame

把每个视图解析后的DataFrame做纵向拼接即可。


完整可运行代码示例

import pandas as pd

# 替换为你自己的配置参数
VIEW_IDS = ['156950826','156928279','156964042']
START_DATE = '2024-01-01'
END_DATE = '2024-01-31'
METRICS = ['ga:sessions', 'ga:users'] # 替换为你需要的指标
DIMENSIONS = ['ga:date', 'ga:country'] # 替换为你需要的维度
def get_batch_report(analytics):
    # 每个view id生成一个独立的请求对象
    report_requests = []
    for view_id in VIEW_IDS:
        report_requests.append({
            'viewId': view_id,
            'dateRanges': [{'startDate': START_DATE, 'endDate': END_DATE}],
            'metrics': [{'expression':i} for i in METRICS],
            'dimensions': [{'name':j} for j in DIMENSIONS],
            'pageSize': 8000
        })
    return analytics.reports().batchGet(
        body={'reportRequests': report_requests}
    ).execute()
def parse_ga_response(response):
    all_dfs = []
    # 遍历每个view id对应的返回结果
    for report in response.get('reports', []):
        # 提取维度和指标表头
        column_header = report.get('columnHeader', {})
        dimension_headers = column_header.get('dimensions', [])
        metric_headers = [m.get('name') for m in column_header.get('metricHeader', {}).get('metricHeaderEntries', [])]
        # 提取当前报告对应的view id
        view_id = report.get('query', {}).get('viewId')
        
        rows = report.get('data', {}).get('rows', [])
        if not rows:
            continue
        
        # 逐行解析数据
        data = []
        for row in rows:
            dimensions = row.get('dimensions', [])
            metrics = row.get('metrics', [])[0].get('values', [])
            row_data = dict(zip(dimension_headers + metric_headers, dimensions + metrics))
            row_data['view_id'] = view_id # 新增字段标记数据所属视图
            data.append(row_data)
        
        df = pd.DataFrame(data)
        all_dfs.append(df)
    
    # 合并所有视图的数据
    return pd.concat(all_dfs, ignore_index=True) if all_dfs else pd.DataFrame()
# 调用示例,analytics是你已经初始化完成的GA服务对象
response = get_batch_report(analytics)
final_df = parse_ga_response(response)

补充说明

  • 最终生成的final_df就是包含所有视图数据的合并DataFrame,新增的view_id字段可以区分不同区域的数据,你可以提前做一个view_id和区域名称的映射字典,再替换为更易读的区域名称
  • 如果你的数据量超过单页返回上限,可以在请求里增加pageToken参数循环拉取所有页数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 12:24:00