Desempaquetar el diccionario de la columna de pandas

Tengo un dataframe que tiene una de las columnas como un diccionario. Quiero descomprimirlo en varias columnas (es decir, el código, la cantidad son columnas separadas en el siguiente formato de columna Sin formato). El siguiente código solía trabajar con pandas v0.22, ahora (0.23) dando un error de índice:

pd.DataFrame.from_records(df.col_name.fillna(pd.Series([{'code':'not applicable'}], index=df.index)).values.tolist()) ValueError: Length of passed values is 1, index implies x 

Busqué en google / stack overflow por horas y ya no funcionaba ninguna de las otras soluciones presentadas anteriormente.

Formato de columna sin formato:

  dict_codes 0 {'code': 'xx', 'amount': '10.00',... 1 {'code': 'yy', 'amount': '20.00'... 2 {'code': 'bb', 'amount': '30.00'... 3 {'code': 'aa', 'amount': '40.00'... 10 {'code': 'zz', 'amount': '50.00'... 11 NaN 12 NaN 13 NaN 

¿Alguien tiene alguna sugerencia?

Gracias

Preparar

 df = pd.DataFrame(dict( codes=[ {'amount': 12, 'code': 'a'}, {'amount': 19, 'code': 'x'}, {'amount': 37, 'code': 'm'}, np.nan, np.nan, np.nan, ] )) df codes 0 {'amount': 12, 'code': 'a'} 1 {'amount': 19, 'code': 'x'} 2 {'amount': 37, 'code': 'm'} 3 NaN 4 NaN 5 NaN 

apply con pd.Series

Asegúrate de dejar dropna primero

 df.codes.dropna().apply(pd.Series) amount code 0 12 a 1 19 x 2 37 m 

 df.drop('codes', 1).assign(**df.codes.dropna().apply(pd.Series)) amount code 0 12.0 a 1 19.0 x 2 37.0 m 3 NaN NaN 4 NaN NaN 5 NaN NaN 

tolist y from_records

La misma idea pero omitir la apply

 pd.DataFrame.from_records(df.codes.dropna().tolist()) amount code 0 12 a 1 19 x 2 37 m 

 df.drop('codes', 1).assign(**pd.DataFrame.from_records(df.codes.dropna().tolist())) amount code 0 12.0 a 1 19.0 x 2 37.0 m 3 NaN NaN 4 NaN NaN 5 NaN NaN 

Preparar

  codes 0 {'amount': 12, 'code': 10} 1 {'amount': 3, 'code': 3} 

apply con pd.Series

 df.codes.apply(pd.Series) amount code 0 12 10 1 3 3