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

使用Google Analytics API双日期范围对比数据,applymap()多变量处理疑问

处理Google Analytics多日期范围数据 + Pandas applymap/多变量操作指南

看起来你已经搞定了GA API的多日期范围请求,接下来就是用Pandas清洗和分析数据对吧?我来一步步帮你理清怎么处理,尤其是你问的applymap和多变量问题~

首先,先把GA API返回的嵌套报告转换成Pandas DataFrame,这是第一步,不然没法处理。我给你写个解析函数:

import pandas as pd

def parse_ga_report_to_df(report):
    # 提取维度名称(比如ga:pagePath)
    dim_headers = [hdr['name'] for hdr in report['columnHeader']['dimensions']]
    
    # 提取指标名称和对应的日期范围,给指标加上日期后缀区分
    date_ranges = report['columnHeader']['metricHeader']['dateRangeHeaders']
    metric_entries = report['columnHeader']['metricHeader']['metricHeaderEntries']
    metric_cols = []
    for dr in date_ranges:
        date_tag = f"{dr['startDate'].replace('-','')}_{dr['endDate'].replace('-','')}"
        for entry in metric_entries:
            metric_cols.append(f"{entry['name']}_{date_tag}")
    
    # 提取每一行的维度和指标值
    rows_data = []
    for row in report['data']['rows']:
        dim_vals = row['dimensions']
        # 每个日期范围的指标值是分开的,要合并到一起
        metric_vals = []
        for metric_group in row['metrics']:
            metric_vals.extend(metric_group['values'])
        rows_data.append(dim_vals + metric_vals)
    
    # 生成DataFrame并把指标转成数值类型
    df = pd.DataFrame(rows_data, columns=dim_headers + metric_cols)
    df[metric_cols] = df[metric_cols].apply(pd.to_numeric)
    return df

然后把你的API请求结果传进去解析:

# 假设你已经初始化好analytics对象
response = get_report(analytics)
# 取batchGet返回的第一个报告
ga_report = response.get('reports', [])[0]
df = parse_ga_report_to_df(ga_report)

现在你应该有了类似这样的DataFrame:

ga:pagePathga:sessions_20180101_20180131ga:pageviews_20180101_20180131ga:sessions_20180201_20180228ga:pageviews_20180201_20180228
/home1200350015004200
/blog80024007502100

接下来重点说你问的applymap和多变量处理:

1. 什么时候用applymap?

applymap是给DataFrame的每个元素单独做处理,比如格式化数值、统一单位这类只依赖单个元素的操作,它没法直接访问同一行的其他列(也就是你说的多变量)。比如你想把所有指标列保留两位小数:

# 筛选出所有指标列(以ga:开头的)
metric_columns = [col for col in df.columns if col.startswith('ga:')]
df[metric_columns] = df[metric_columns].applymap(lambda x: round(x, 2))

2. 处理多变量(关联同一行多列)怎么办?

如果要对比两个日期范围的数据(比如计算会话数增长率),这时候需要访问同一行的多个列,applymap就不适用了,推荐两种方式:

方式一:直接列运算(最高效,优先用)

Pandas的列运算比apply快很多,能不用apply就不用:

# 计算2月相对1月的会话增长率
df['session_growth_%'] = (df['ga:sessions_20180201_20180228'] - df['ga:sessions_20180101_20180131']) / df['ga:sessions_20180101_20180131'] * 100
# 处理分母为0的情况(避免报错)
df['session_growth_%'] = df['session_growth_%'].fillna(0).replace([float('inf'), -float('inf')], 0)

方式二:用df.apply按行处理(适合复杂逻辑)

如果逻辑比较复杂(比如要加多个判断),再用apply:

def calculate_growth_rate(row):
    jan_sessions = row['ga:sessions_20180101_20180131']
    feb_sessions = row['ga:sessions_20180201_20180228']
    
    if jan_sessions == 0:
        return 100 if feb_sessions > 0 else 0  # 1月没数据,2月有就算100%增长
    return round((feb_sessions - jan_sessions)/jan_sessions * 100, 2)

df['session_growth_%'] = df.apply(calculate_growth_rate, axis=1)

这样就能轻松对比两个日期范围的数据啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:29:07