Если входными данными являются jsons, лучше использовать json_normalize
.
j = [{'description': 'Total number 1', 'id': 'a', 'name': 'impressions', 'period': 'day', 'title': 'Impressions', 'values': [{'end_time': '2018-06-12T07:00:00+0000', 'value': 17686}, {'end_time': '2018-06-13T07:00:00+0000', 'value': 4064}]},
{'description': 'fn', 'id': 'b', 'name': 'impressions', 'period': 'day', 'title': 'Impressions', 'values': [{'end_time': '2018-06-12T07:00:00+0000', 'value': 17686}, {'end_time': '2018-06-13T07:00:00+0000', 'value': 4064}]}]
from pandas.io.json import json_normalize
df = json_normalize(j, 'values')
print (df)
end_time value
0 2018-06-12T07:00:00+0000 17686
1 2018-06-13T07:00:00+0000 4064
2 2018-06-12T07:00:00+0000 17686
3 2018-06-13T07:00:00+0000 4064
Но при необходимости также добавить оригинальные столбцы:
from pandas.io.json import json_normalize
df = json_normalize(j, 'values', ['description', 'id', 'name', 'period', 'title'])
print (df)
end_time value description id name period \
0 2018-06-12T07:00:00+0000 17686 Total number 1 a impressions day
1 2018-06-13T07:00:00+0000 4064 Total number 1 a impressions day
2 2018-06-12T07:00:00+0000 17686 fn b impressions day
3 2018-06-13T07:00:00+0000 4064 fn b impressions day
title
0 Impressions
1 Impressions
2 Impressions
3 Impressions
Первое решение:
test = pd.DataFrame({
'name':['a', 'b', 'n'],
'values':[[{'end_time': '2018-06-12T07:00:00+0000', 'value': 17686},
{'end_time': '2018-06-13T07:00:00+0000', 'value': 4064}],[{'end_time': '2018-06-12T07:00:00+0000', 'value': 17686},
{'end_time': '2018-06-13T07:00:00+0000', 'value': 4064}],[{'end_time': '2018-06-12T07:00:00+0000', 'value': 17686},
{'end_time': '2018-06-13T07:00:00+0000', 'value': 4064}]]
})
df = (pd.concat([pd.DataFrame(x) for x in test['values']], axis=1, keys=(1, 2))
.stack(0)
.reset_index(level=1, drop=True))
print (df)
end_time value
0 2018-06-12T07:00:00+0000 17686
0 2018-06-12T07:00:00+0000 17686
1 2018-06-13T07:00:00+0000 4064
1 2018-06-13T07:00:00+0000 4064
df = test.join(df)
print (df)
name values \
0 a [{'end_time': '2018-06-12T07:00:00+0000', 'val...
0 a [{'end_time': '2018-06-12T07:00:00+0000', 'val...
1 b [{'end_time': '2018-06-12T07:00:00+0000', 'val...
1 b [{'end_time': '2018-06-12T07:00:00+0000', 'val...
2 n [{'end_time': '2018-06-12T07:00:00+0000', 'val...
end_time value
0 2018-06-12T07:00:00+0000 17686.0
0 2018-06-12T07:00:00+0000 17686.0
1 2018-06-13T07:00:00+0000 4064.0
1 2018-06-13T07:00:00+0000 4064.0
2 NaN NaN