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

时间:2018-04-20 18:51:56

标签: python arrays json pandas

我有一个输入DataFrame df,如下所示(ID不是1,2,3):

| id    | name.event | name.start |
|-------|------------|------------|
| a1xy  | sports     | 100        |
| a1xy  | lunch      | 121        |
| a7yz  | lunch      | 109        |
| a7yz  | movie      | 97         |
| bx4y  | dinner     | 78         |
| bx4y  | sleep      | 25         |

我想展平JSON数组元素,以便我的结果输出为:

{{1}}

我怎样才能在Python中执行此操作?

2 个答案:

答案 0 :(得分:0)

使用apply(pd.DataFrame)

k= df.name.apply(pd.DataFrame).tolist()

final_df = pd.concat(k)
final_df.index = pd.Series(final_df.index).shift(-1).fillna(0).cumsum()

final_df
    event start
1  sports   100
1   lunch   121
2   lunch   109
2   movie    97
3  dinner    78
3   sleep    25

答案 1 :(得分:0)

你可以使用python json库来解析带有pandas apply函数的JSON并创建一个列表,稍后你可以使用pandas concat函数将其转换为dataframe,然后更改该数据帧的索引。

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