【问题标题】:Iterating Google analytics API function on a Pandas Dataframe在 Pandas Dataframe 上迭代 Google Analytics API 函数
【发布时间】:2018-07-05 19:03:00
【问题描述】:

我有一个数据框 (f) 的输入:页面标题 (title_)、开始日期 ('date_') 和结束日期 (date_date),我想在 DataFrame 中的每一行上迭代 Google 分析 API get_report 函数, 以获取结果的新 DataFrame。

这是我的代码:

for i in f.index:
    lista = []
    df = print_response(get_report(
             config.service,  
             start_date=[f.loc[i]['date_']],
             end_date=[f.loc[i]['date_date']], 
             view_id='xxxxxxxx',
             metrics=[{'expression': 'ga:pageViews'}],
             dimensionFilterClauses= [{
                      "filters": [{
                              "dimensionName": "ga:pageTitle",
                              "expressions": [f.loc[i]['title_']]}]
              }],
             dimensions=[{"name": "ga:pageTitle"}]))
    lista.append(df)
    time.sleep(2)
print(lista)

我得到错误:

TypeError:“日期”类型的对象不是 JSON 可序列化的

我的代码有什么问题,以及如何将输出构造为 DataFrame?

[update] 那是我的 get_report 函数:

def get_report(analytics, start_date, end_date, view_id, metrics, dimensions, dimensionFilterClauses):
  return analytics.reports().batchGet(
      body={
        "reportRequests":[
        {
                "viewId": view_id,
                "dateRanges":[{"startDate":start_date,"endDate":end_date}],
                "metrics":metrics,
                "dimensions": dimensions,
                "dimensionFilterClauses": dimensionFilterClauses,
        }]
      }).execute()

【问题讨论】:

    标签: python google-analytics google-analytics-api google-api-python-client


    【解决方案1】:

    你试过关注quick start

    def print_response(response):
      """Parses and prints the Analytics Reporting API V4 response.
    
      Args:
        response: An Analytics Reporting API V4 response.
      """
      for report in response.get('reports', []):
        columnHeader = report.get('columnHeader', {})
        dimensionHeaders = columnHeader.get('dimensions', [])
        metricHeaders = columnHeader.get('metricHeader', {}).get('metricHeaderEntries', [])
    
        for row in report.get('data', {}).get('rows', []):
          dimensions = row.get('dimensions', [])
          dateRangeValues = row.get('metrics', [])
    
          for header, dimension in zip(dimensionHeaders, dimensions):
            print header + ': ' + dimension
    
          for i, values in enumerate(dateRangeValues):
            print 'Date range: ' + str(i)
            for metricHeader, value in zip(metricHeaders, values.get('values')):
              print metricHeader.get('name') + ': ' + value
    

    【讨论】:

    • 太棒了。这解决了输出问题,但不是输入问题。我的意思是“'日期'类型的对象不是 JSON 可序列化的”错误。
    • 因此,在快速入门之后,报告对象非常复杂,您似乎提供了一些作为日期对象的东西,而它应该是一个字符串。当我们看不到 get_report() 方法时,很难知道你在做什么
    • 更新:我做到了。将日期对象转换为字符串后解决。谢谢
    猜你喜欢
    • 2021-02-07
    • 1970-01-01
    • 2020-01-03
    • 2021-12-28
    • 2016-03-11
    • 2019-01-27
    • 2022-01-22
    • 2018-10-13
    • 1970-01-01
    相关资源
    最近更新 更多