Extraer JSON nested en el dataframe de pandas

Estoy tratando de descomprimir JSON nested en el siguiente dataframe de pandas:

id info 0 0 [{u'a': u'good', u'b': u'type1'}, {u'a': u'bad', u'b': u'type2'}] 1 1 [{u'a': u'bad', u'b': u'type1'}, {u'a': u'bad', u'b': u'type2'}] 2 2 [{u'a': u'good', u'b': u'type1'}, {u'a': u'good', u'b': u'type2'}] 

Mi resultado esperado es:

  id type1 type2 0 0 good bad 1 1 bad bad 2 2 good good 

He estado buscando otras soluciones, incluyendo json_normalize pero json_normalize no funciona para mí. ¿Debo tratar el JSON como una cadena para obtener lo que quiero? ¿O hay una manera más directa de hacer esto?

  1. Use json_normalize para manejar una list de diccionarios y divida los dictados individuales en series separadas después de configurar la ruta común, que es la información aquí. Luego, unstack + serie de aplicación que se anexa hacia abajo para ese nivel.

 from pandas.io.json import json_normalize df_info = json_normalize(df.to_dict('list'), ['info']).unstack().apply(pd.Series) df_info 

introduzca la descripción de la imagen aquí

  1. Gire el DF con un aggfunc opcional para manejar el eje de índice duplicado:

 DF = df_info.pivot_table(index=df_info.index.get_level_values(1), columns=['b'], values=['a'], aggfunc=' '.join) DF 

introduzca la descripción de la imagen aquí

  1. Finalmente concatenar lateralmente:

 pd.concat([df[['ID']], DF.xs('a', axis=1).rename_axis(None, 1)], axis=1) 

introduzca la descripción de la imagen aquí


A partir de DF utilizado:

 df = pd.DataFrame(dict(ID=[0,1,2], info=[[{u'a': u'good', u'b': u'type1'}, {u'a': u'bad', u'b': u'type2'}], [{u'a': u'bad', u'b': u'type1'}, {u'a': u'bad', u'b': u'type2'}], [{u'a': u'good', u'b': u'type1'}, {u'a': u'good', u'b': u'type2'}]]))