Я запрашиваю Google Analytics API и использую цикл for для получения данных из более чем одного представления одновременно. Затем у меня есть функция синтаксического анализа, которая анализирует мой результат JSON в кадре данных pandas. Если я распечатываю результат функции, он показывает мне каждый результат в отдельном фрейме данных, для скольких просмотров я его запрашиваю. Однако я не могу добавить результат в новый фрейм данных или перечислить каждую итерацию.
Я пытался использовать цикл while
df_new = []
view_id_list = ['##', '##', '##']
while len(df_new) < len(view_id_list)
df2 = df_new.append(((prase_response_single(response_data)[0]))
этот код - мой пример запроса, который проходит через мой список view_id и приносит мне данные для каждого из них в отдельности
for i in viewId_listUse:
sample_request = {
'viewId': i,
'dateRanges': {
'startDate': datetime.strftime(datetime.now() - timedelta(days=30), '%Y-%m-%d'),
'endDate': datetime.strftime(datetime.now(), '%Y-%m-%d')
},
'dimensions': [{'name': 'ga:date'}],
'metrics': [{'expression': 'ga:sessions'}]
}
response = api_client.reports().batchGet(
body={
'reportRequests': sample_request
}).execute()
response_data = response.get('reports', [])[0]
print((prase_response_single(response_data)[0]))
эта функция анализирует данные JSON во фрейм данных pandas, но очищает результирующий список каждый раз, когда он вызывается
def prase_response_single(report):
"""Parses and prints the Analytics Reporting API V4 response"""
result_list = []
data_csv = []
data_csv2 = []
header_row = []
columnHeader = report.get('columnHeader', {})
metricHeaders = columnHeader.get('metricHeader', {}).get('metricHeaderEntries', [])
dimensionHeaders = columnHeader.get('dimensions', [])
for dheader in dimensionHeaders:
header_row.append(dheader)
for mheader in metricHeaders:
header_row.append(mheader['name'])
rows = report.get('data', {}).get('rows', [])
for row in rows:
row_temp = []
dimensions = row.get('dimensions', [])
metrics = row.get('metrics', [])
for d in dimensions:
row_temp.append(d)
for m in metrics[0]['values']:
row_temp.append(m)
data_csv.append(row_temp)
if len(metrics) == 2:
row_temp2 = []
for d in dimensions:
row_temp2.append(d)
for m in metrics[1]['values']:
row_temp2.append(m)
data_csv2.append(row_temp2)
result_df = pandas.DataFrame(data_csv, columns=header_row)
result_list.append(result_df)
if data_csv2 != []:
result_list.append(pandas.DataFrame(data_csv2, columns=header_row))
return result_list
используя функцию печати, это тот тип результата, который я получаю (с большим количеством строк, но это пример формата)
ga:date ga:sessions
0 20190522 1243
1 20190523 1167
2 20190524 1001
однако я не могу добавить эти отдельные кадры данных вместе, так как функция сбрасывает свой список каждый раз, когда она вызывается циклом for.