如何将Google Analytics Admin API响应转换为Pandas DataFrame
解决Google Analytics Admin API响应转Pandas DataFrame的问题
核心问题分析
你拿到的ListCustomDimensionsPager是Google API返回的分页迭代器对象,并非直接可序列化的列表或字典。它内部包含API调用相关的内部组件,因此直接序列化__dict__会触发不可序列化错误;同时迭代器不支持下标访问,必须先遍历提取实际的自定义维度条目。
每个自定义维度条目是protobuf生成的CustomDimension对象,这类对象内置了to_dict()方法,可直接转换为Pandas可处理的字典格式。
解决方案步骤
- 遍历分页迭代器,提取所有自定义维度条目
- 将每个条目转换为字典
- 用Pandas将字典列表转为DataFrame
代码实现
方式1:修改原函数直接返回字典列表
def get_custom_dimensions(property_filter): client = admin_v1beta.AnalyticsAdminServiceClient() request = admin_v1beta.ListCustomDimensionsRequest(parent=property_filter) # 遍历分页器,将每个CustomDimension对象转为字典 return [cd.to_dict() for cd in client.list_custom_dimensions(request=request)] # 调用并转为DataFrame ga4_custom_dimensions = get_custom_dimensions("properties/xxx") import pandas as pd df = pd.DataFrame(ga4_custom_dimensions)
方式2:在调用后处理原返回的分页器
如果不想修改原函数,可在获取分页器后手动处理:
ga4_custom_dimensions_pager = get_custom_dimensions("properties/xxx") # 遍历分页器提取条目并转字典 cd_dict_list = [cd.to_dict() for cd in ga4_custom_dimensions_pager] # 转为DataFrame import pandas as pd df = pd.DataFrame(cd_dict_list)
处理嵌套字段(可选)
如果自定义维度包含嵌套结构(比如部分字段是子对象),可以用json_normalize展开嵌套内容:
df = pd.json_normalize(cd_dict_list)
关键说明
- 不要直接序列化分页器对象的
__dict__或vars(),因为其中包含不可JSON序列化的API调用内部组件(比如_GapicCallable)。 to_dict()是Google protobuf消息对象的标准方法,会自动将枚举值(比如scope: EVENT)转换为对应的字符串,无需手动处理。
内容的提问来源于stack exchange,提问作者Lenwood
相关产品推荐
相关产品推荐

