Reputation: 169
I have a basic python script that churns out a load of analytics data but I can't seem to get it to pump it out into a csv and it's churning back the error.
AttributeError: 'dict' object has no attribute 'to_csv'
I was wondering if someone could help me, here is my code which I got from https://medium.com/analytics-for-humans/submitting-your-first-google-analytics-reporting-api-request-cdda19969940
api_name = 'analyticsreporting'
api_version = 'v4'
api_client = google_build(serviceName=api_name, version=api_version, http=authorized)
sample_request = {
'viewId': '151121821',
'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()
print(response)
def prase_response(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
response_data = response.get('reports', [])[0]
print(prase_response(response_data)[0])
response_data.to_csv('my/file/path')
Here are the data values that get output
ga:date ga:sessions
0 20180626 94
1 20180627 78
2 20180628 33
3 20180629 78
4 20180702 79
5 20180703 90
6 20180704 78
7 20180705 66
8 20180706 60
9 20180708 1
10 20180709 101
11 20180710 80
12 20180711 69
13 20180712 82
14 20180713 76
15 20180714 1
16 20180716 91
17 20180717 84
18 20180718 79
19 20180719 58
20 20180720 67
21 20180722 1
22 20180723 95
23 20180724 92
24 20180725 85
25 20180726 76
Upvotes: 0
Views: 6036
Reputation: 184
to_csv is a dataframe function which you are trying to apply to a dict, hence the error.
I believe you simply made the following mistake:
response_data.to_csv('my/file/path')
should be:
prase_response(response_data)[0].to_csv('my/file/path')
Because your prase_response function is returning a list of dataframes.
Upvotes: 2