我有一个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]