首页 > 解决方案 > How can I create columns out of a nested dictionary in python pandas

问题描述

I'm trying to filter my data frame by making separate columns to increase readability and usability.

Problem statement: Column "Editables" has a nested dictionary as the value I'm trying to create separate columns as per the key. For instance 'photo_repace' 'text_remove', 'text_add' has different columns.

The nested dictionary:

{
'photo': {
    'photo_replace': None,
    'photo_remove': None,
    'photo_add': None,
    'photo_effect': None,
    'photo_brightness': None,
    'background_color': None,
    'photo_resize': None,
    'photo_rotate': None,
    'photo_mirror': None,
    'photo_layer_rearrange': None,
    'photo_move': None
},
'text': {
    'text_remove': None,
    'text_add': None,
    'text_edit': None,
    'font_select': None,
    'text_color': None,
    'text_style': None,
    'background_color': None,
    'text_align': None,
    'text_resize': None,
    'text_rotate': None,
    'text_move': None,
    'text_layer_rearrange': None
}
}

Output

enter image description here

Code I've been using:

df["editables"] = df["editables"].apply(lambda x : dict(eval(x)))
df_edit = df["editables"].apply(pd.Series )

Output: enter image description here

标签: pythonpandasdataframejupyter-notebook

解决方案


Try this:

>>> dct = {
'photo': {
    'photo_replace': None,
    'photo_remove': None,
    'photo_add': None,
    'photo_effect': None,
    'photo_brightness': None,
    'background_color': None,
    'photo_resize': None,
    'photo_rotate': None,
    'photo_mirror': None,
    'photo_layer_rearrange': None,
    'photo_move': None
},
'text': {
    'text_remove': None,
    'text_add': None,
    'text_edit': None,
    'font_select': None,
    'text_color': None,
    'text_style': None,
    'background_color': None,
    'text_align': None,
    'text_resize': None,
    'text_rotate': None,
    'text_move': None,
    'text_layer_rearrange': None
}
}
>>> pd.DataFrame(dct).T
       photo_replace  photo_remove  ...  text_move  text_layer_rearrange
photo            NaN           NaN  ...        NaN                   NaN
text             NaN           NaN  ...        NaN                   NaN

[2 rows x 22 columns]
>>> pd.DataFrame(dct).T[['photo_replace', 'photo_remove', 'text_remove']]
       photo_replace  photo_remove  text_remove
photo            NaN           NaN          NaN
text             NaN           NaN          NaN

NOTE: .T transposes the dataframe.


推荐阅读