Inverse of Pandas json_normalize Inverse of Pandas json_normalize pandas pandas

Inverse of Pandas json_normalize


I implemented it with a couple functions

def set_for_keys(my_dict, key_arr, val):    """    Set val at path in my_dict defined by the string (or serializable object) array key_arr    """    current = my_dict    for i in range(len(key_arr)):        key = key_arr[i]        if key not in current:            if i==len(key_arr)-1:                current[key] = val            else:                current[key] = {}        else:            if type(current[key]) is not dict:                print("Given dictionary is not compatible with key structure requested")                raise ValueError("Dictionary key already occupied")        current = current[key]    return my_dictdef to_formatted_json(df, sep="."):    result = []    for _, row in df.iterrows():        parsed_row = {}        for idx, val in row.iteritems():            keys = idx.split(sep)            parsed_row = set_for_keys(parsed_row, keys, val)        result.append(parsed_row)    return result#Where df was parsed from json-dict using json_normalizeto_formatted_json(df, sep=".")


A simpler approach:
Uses only 1 function...

def df_to_formatted_json(df, sep="."):    """    The opposite of json_normalize    """    result = []    for idx, row in df.iterrows():        parsed_row = {}        for col_label,v in row.items():            keys = col_label.split(".")            current = parsed_row            for i, k in enumerate(keys):                if i==len(keys)-1:                    current[k] = v                else:                    if k not in current.keys():                        current[k] = {}                    current = current[k]        # save        result.append(parsed_row)    return result