首页 > 解决方案 > Google Analytics 对 Python 中 Pandas Dataframe 的响应

问题描述

仍然是 Python 的新手,所以请保持温柔。

我正在尝试在 Python 中解析对 Pandas 数据框的 Google Analytics Reporting API V4 响应,特别是使用 Repl 如果这有什么不同。我已经尝试了一些来自 SO 的普遍接受的答案,但似乎没有一个有效。代码“成功”(无错误消息)执行,但即使是脚本末尾的基本 print('Done') 命令也没有显示在终端中。

谁能看到我的代码可能有什么问题?

import pandas as pd
from pandas import json_normalize

response = {'reports':[{'columnHeader':{'dimensions':['ga:date','ga:sourceMedium','ga:landingPagePath','ga:deviceCategory','ga:browser'],'metricHeader':{'metricHeaderEntries':[{'name':'ga:sessions','type':'INTEGER'}]}},'data':{'rows':[{'dimensions':['20201126','(direct) / (none)','/test/page.html','desktop','Chrome'],'metrics':[{'values':['1']}]}],'totals':[{'values':['1000']}],'rowCount':100,'minimums':[{'values':['1']}],'maximums':[{'values':['10']}],'isDataGolden':True},'nextPageToken':'1'}]}

def parse_data(response):

  reports = response['reports'][0]
  columnHeader = reports['columnHeader']['dimensions']
  metricHeader = reports['columnHeader']['metricHeader']['metricHeaderEntries']

  columns = columnHeader
  for metric in metricHeader:
    columns.append(metric['name'])

  data = pd.json_normalize(reports['data']['rows'])
  data_dimensions = pd.DataFrame(data['dimensions'].tolist())
  data_metrics = pd.DataFrame(data['metrics'].tolist())
  data_metrics = data_metrics.applymap(lambda x: x['values'])
  data_metrics = pd.DataFrame(data_metrics[0].tolist())
  result = pd.concat([data_dimensions, data_metrics], axis=1, ignore_index=True)

  return result
  print(result)
  result.to_csv('result.csv')
  print('Done')

标签: pythonpandasdataframegoogle-analytics

解决方案


return这是因为在给定的函数中,语句之后发生的任何代码都不会执行。一旦return达到,功能就完成了。如果您将print调用和to_csv方法放在return语句之前,它们应该运行。

尝试重新组织您的代码:

def parse_data(response):

  reports = response['reports'][0]
  columnHeader = reports['columnHeader']['dimensions']
  metricHeader = reports['columnHeader']['metricHeader']['metricHeaderEntries']

  columns = columnHeader
  for metric in metricHeader:
    columns.append(metric['name'])

  data = pd.json_normalize(reports['data']['rows'])
  data_dimensions = pd.DataFrame(data['dimensions'].tolist())
  data_metrics = pd.DataFrame(data['metrics'].tolist())
  data_metrics = data_metrics.applymap(lambda x: x['values'])
  data_metrics = pd.DataFrame(data_metrics[0].tolist())
  result = pd.concat([data_dimensions, data_metrics], axis=1, ignore_index=True)

  print(result)
  result.to_csv('result.csv')
  print('Done')
  return result

推荐阅读