我有一个转换为列表的数据。如何将其转换为DataFrame
,以使该列表中的每一行成为DataFrame
中的一列?
[{'date': '2019-01-01',
'stats': [{'metrics': {'comp_1': 149,
'comp_2': 276}}]},
{'date': '2019-01-02',
'stats': [{'metrics': {'comp_1': 232,
'comp_2': 842}}]}]
我尝试做pd.DataFrame(c)
,其中c
是保存列表的变量,但是我看到每个日期的所有成分都存储在一行中
预期输出:
date, comp_1, comp_2
2019-01-01,149,276
2019-01-02,232,842
答案 0 :(得分:4)
首先使用json.json_normalize
:
a = [{'date': '2019-01-01',
'stats': [{'metrics': {'comp_1': 149,
'comp_2': 276}}]},
{'date': '2019-01-02',
'stats': [{'metrics': {'comp_1': 232,
'comp_2': 842}}]}]
from pandas.io.json import json_normalize
df = json_normalize(a,'stats', ['date'])
print (df)
metrics.comp_1 metrics.comp_2 date
0 149 276 2019-01-01
1 232 842 2019-01-02
最后将列名称转换为列表,并按子集重新排序:
df = df[df.columns[-1:].tolist() + df.columns[:-1].tolist()]
print (df)
date metrics.comp_1 metrics.comp_2
0 2019-01-01 149 276
1 2019-01-02 232 842
编辑:
带循环的解决方案:
out = []
for x in a:
for k, v in x.items():
for z in v:
if isinstance(z, dict):
d = z['metrics']
d['year'] = x['date']
out.append(d)
df = pd.DataFrame(out)
print (df)
comp_1 comp_2 year
0 149 276 2019-01-01
1 232 842 2019-01-02