@dmitriewa_a

Как перегруппировать данные в Pandas DF после парсинга JSON?

Всем привет,

вот такая задачка, буду благодарна за любую помощь.

Есть таблица в бд куда должны попадать данные из гугл аналитики.

Таблица выглядит так:

start_date | end_date |view_id |element_1 |element_2 |element_3 |element_4 |element_5 |metrics |m_value


Всего элементов 7.

Пока процесс заполнения выглядит так

Я делаю запрос к АПИ аналитики, парсю вложенный словарь с параметрами для запроса к АПИ:

data_test = {
 
    'view_id_01' : {'view_id': '01',
                           'start_date': '2019-08-01',
                           'end_date': '2019-09-02',
                           'metrics': [{'expression': 'ga:sessions'}, {'expression':'ga:users'}],
                           'dimensions': [{'name': 'ga:country'}, {'name': 'ga:userType'}, {'name': 'ga:date'}]}
 
'view_id_02' : {'view_id': '02',
                           'start_date': '2019-08-01',
                           'end_date': '2019-09-02',
                           'metrics': [{'expression': 'ga:sessions'}, {'expression':'ga:users'}],
                           'dimensions': [{'name': 'ga:country'}, {'name': 'ga:date'}]},
 
'view_id_03' : {'view_id': '03',
                           'start_date': '2019-08-01',
                           'end_date': '2019-09-02',
                           'metrics': [{'expression': 'ga:sessions'}, {'expression':'ga:users'}],
                           'dimensions': [{'name': 'ga:country'}, {'name': 'ga:date'}]}
}


Ответ аналитики всегда в формате JSON

{"reports": [
    {
      "columnHeader": {
        "metricHeader": {
          "metricHeaderEntries": [
            {
              "name": "ga:users",
              "type": "INTEGER"
            }
          ]
        }
      },
      "data": {
        "rows": [
          {
            "metrics": [
              {"values": ["54"]}
            ]
          }
        ],
        "totals": [{"values": ["54"]}],
        "minimums": [{"values": ["54"]}],
        "maximums": [{"values": ["54"]}],
        "rowCount": 1,
      }
    }
]}


У меня есть функция преобразования JSON в pandas df
def print_response_new_test(response):

    list = []

    for report in response.get('reports', []):
        columnHeader = report.get('columnHeader', {})
        dimensionHeaders = columnHeader.get('dimensions', [])
        metricHeaders = columnHeader.get('metricHeader', {}).get('metricHeaderEntries', [])
        rows = report.get('data', {}).get('rows', [])

    for row in rows:
        dict = {}
        dimensions = row.get('dimensions', [])
        dateRangeValues = row.get('metrics', [])


        for header, dimension in zip(dimensionHeaders, dimensions):
            dict[header] = dimension


        for i, values in enumerate(dateRangeValues):
            for metric, value in zip(metricHeaders, values.get('values')):
                if ',' in value or '.' in value:
                    dict[metric.get('name')] = float(value)
                else:
                    dict[metric.get('name')] = int(value)

        list.append(dict)

    df = pd.DataFrame(list)
    df['start_date'] = sample_request.get('start_date')
    df['end_date'] = sample_request.get('end_date')
    df['view_id'] = sample_request.get('view_id')
    return df

Результат
browser   country  sessions users start_date  end_date      view_id
 
chrome   china       100      90     2019-01-01  2019-01-02     01
mozilla   germany  200      190   2019-01-01  2019-01-02     02
safari      france      300      290   2019-01-01  2019-01-02     03

Но мне надо чтобы было так
start_date  end_date    view_id element_1 element_2 metrics  m_value
 
2019-01-01  2019-01-02  01      chrome    china       sessions   100
2019-01-01  2019-01-02  01      chrome    china       users        90
2019-01-01  2019-01-02  02      mozilla   germany   sessions   200
2019-01-01  2019-01-02  02      mozilla   germany  users         190
2019-01-01  2019-01-02  03      safari      france      sessions    300
2019-01-01  2019-01-02  03      safari      france      users         290

Я даже не знаю с чего начать, обрабатывать уже готовую таблицу или переписывать функцию конвертации
  • Вопрос задан
  • 26 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы