如何在pandas数据框架中规范化一个复杂的json格式,它是一个字典列表



我有一个pandas数据框架,其中有一个json格式的列。我不明白如何提取这个

df['completionDetails'][0] gives:
[{'name': 'start', 'time': 1654098788177},
{'name': 'arrival',
'time': 1654099038368,
'location': [-74.2713929, 40.5017297]},
{'name': 'departure',
'time': 1654098843357,
'location': [-74.2802414, 40.5095964]}]

I have try:

dict_df = pd.DataFrame([ast.literal_eval(i) for i in df['completionDetails'].values])

但是它给我错误。我可以用什么方法呢?

预期输出:

start_time  arrival_time    arrival_location    departure_time  departure_location
1654098788177   1654099038368   [-74.2713929, 40.5017297]   1654098843357    [-74.2802414, 40.5095964]

IIUCcompletionDetails列的每个单元格是一个字典列表。您可以从每个单元格中创建一个数据帧,并连接dfs:

dict_df = pd.concat([pd.DataFrame(i) for i in df['completionDetails'].values])
编辑:

按照您自己的编辑,您将得到所需的输出:

dict_df = pd.concat([pd.DataFrame({f"{x['name']}_{k}": [v]
for x in i for k,v in x.items() if k!='name'}
) for i in df['completionDetails'].values if isinstance(i, list)])

正如你所看到的,我们正在从name键和其他键中构建键名来创建新的字典,这些字典将用于创建数据帧(这些数据帧又将相互连接)

输出:

start_time   arrival_time           arrival_location  departure_time         departure_location
0  1654098788177  1654099038368  [-74.2713929, 40.5017297]   1654098843357  [-74.2802414, 40.5095964]

相关内容

最新更新