How to convert more than 3 level N nested dictionary to levelled dataframe?
JavaScript
x
11
11
1
input_dict = {
2
'.Stock': {
3
'.No[0]': '3241512)',
4
'.No[1]': '1111111111',
5
'.No[2]': '444444444444',
6
'.Version': '46',
7
'.Revision': '78'
8
},
9
'.Time': '12.11.2022'
10
}
11
what I expect:
JavaScript
1
8
1
import pandas as pd
2
expected_df = pd.DataFrame([{'level_0': '.Stock', 'level_1': '.No_0', "value": '3241512'},
3
{'level_0': '.Stock', 'level_1': '.No_1', "value": '1111111111',},
4
{'level_0': '.Stock', 'level_1': '.No_2', "value": '444444444444'},
5
{'level_0': '.Stock', 'level_1': '.Version', "value": '46'},
6
{'level_0': '.Stock', 'level_1': '.Revision', "value": '78'},
7
{'level_0': '.Time', "value": '12.11.2022'}])
8
index | level_0 | level_1 | value |
---|---|---|---|
0 | .Stock | .No_0 | 3241512 |
1 | .Stock | .No_1 | 1111111111 |
2 | .Stock | .No_2 | 444444444444 |
3 | .Stock | .Version | 46 |
4 | .Stock | .Revision | 78 |
5 | .Time | NaN | 12.11.2022 |
Firsly I need to convert nested dictionary to list of levelled dictionaries, than lastly convert list of dictionaries to dataframe. How can I convert, pls help me!
I’ve already tried the code below but it doesn’t show exactly the right result.
JavaScript
1
2
1
pd.DataFrame(input_dict).unstack().to_frame().reset_index()
2
Advertisement
Answer
I found solution, thanks for your comments:(
JavaScript
1
16
16
1
def nesting_list_convert(in_dict,level=0):
2
out_list = []
3
for k1, v1 in in_dict.items():
4
if isinstance(v1, dict):
5
temp_list = nesting_list_convert(v1,level+1)
6
for element in temp_list:
7
temp_dict = {("level_"+str(level)) : k1}
8
temp_dict.update(element)
9
out_list.append(temp_dict)
10
else:
11
out_list.append({("level_"+str(level)) : k1,"value":v1})
12
return out_list
13
14
out_df = pd.DataFrame(nesting_list_convert(input_dict))
15
out_df = out_df.reindex(sorted(out_df.columns), axis=1)
16
index | level_0 | level_1 | value |
---|---|---|---|
0 | .Stock | .No_0 | 3241512 |
1 | .Stock | .No_1 | 1111111111 |
2 | .Stock | .No_2 | 444444444444 |
3 | .Stock | .Version | 46 |
4 | .Stock | .Revision | 78 |
5 | .Time | NaN | 12.11.2022 |
This solves 6′ nested level of dictionary.