我有一个输入 DataFrame df,如下所示(ID 不是 1,2,3):
| id | name |
|-------|---------------------------------------------------------------------------------------|
| a1xy | [ { "event": "sports", "start": "100"}, { "event": "lunch", "start": "121" } ] |
| a7yz | [ { "event": "lunch", "start": "109"}, { "event": "movie", "start": "97" } ] |
| bx4y | [ { "event": "dinner", "start": "78"}, { "event": "sleep", "start": "25" } ] |
我想展平 JSON 数组元素,以便我的结果输出为:
| id | name.event | name.start |
|-------|------------|------------|
| a1xy | sports | 100 |
| a1xy | lunch | 121 |
| a7yz | lunch | 109 |
| a7yz | movie | 97 |
| bx4y | dinner | 78 |
| bx4y | sleep | 25 |
我如何在 Python 中执行此操作?
最佳答案
您可以使用 python json 库通过 pandas apply 函数解析 JSON 并创建一个列表,稍后您可以使用 pandas concat 函数将其转换为数据帧,然后更改该数据帧的索引。
import json
ll = df.name.apply(lambda row: pd.DataFrame(json.loads(row))).tolist()
new_df = pd.concat(ll)
new_df.index = pd.Series(new_df.index).shift(-1).fillna(0).cumsum()
new_df
event start
1.0 sports 100
1.0 lunch 121
2.0 lunch 109
2.0 movie 97
3.0 dinner 78
3.0 sleep 25
关于python - 如何在 pandas DataFrame 中展平 JSON 数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49948024/