python - 如何在 pandas DataFrame 中展平 JSON 数组元素

标签 python arrays json pandas

我有一个输入 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/

相关文章:

python - 有没有办法使用 Python 发现用户的 Windows 桌面路径?

python - 如何在 python 中围绕解析函数的闭包中创建索引

c - 一个数组使用 C 指针将数据复制到另外 2 个数组

c++ - 将指针数组传递给模板类方法

C:二维 int 数组行的 free() 使程序停止

java - 如何在 Groovy JsonSlurper 中维护 JSON 顺序?

python - PyGame,如何创建带有文本的按钮?

python - 是否可以进一步优化此数字运算算法?

json - 为什么我的 v-for 不循环? VUE.JS 与 JSON

javascript - 过滤属性包含字符串的数组