我有一个转换为列表的数据。如何将其转换为 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
最佳答案
使用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
关于python - 将嵌套字典列表转换为 pandas DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58503967/