I have a function which create several dicts of dicts, based on some conditions.
However, I would really like to turn the dict into a dataframe after collecting it. But I can't find an easy way to do so... Right now I'm thinking the solution is to multiply each key in the dict by the number of keys in the most inner dict, but hopefully there is a better way
Since my function creates the dict I can alter it in any way, if there is a better way to do this.
Here is my dict right now
{'TSLA': {2011: {'negative': {'lowPrice': 185.16,
'lowDate': '05/27/19',
'highPrice': 365.71,
'highDate': '12/10/18',
'change': -0.49}},
2012: {'negative': {'lowPrice': 185.16,
'lowDate': '05/27/19',
'highPrice': 365.71,
'highDate': '12/10/18',
'change': -0.49}},
2013: {'negative': {'lowPrice': 32.91,
'lowDate': '01/07/13',
'highPrice': 37.24,
'highDate': '03/26/12',
'change': -0.12},
'positive': {'lowPrice': 32.91,
'lowDate': '01/07/13',
'highPrice': 190.9,
'highDate': '09/23/13',
'change': 4.8}}}}
My desired output would be something like this, of course with the values:
lowPrice lowDate highPrice highDate change
ATVI 2012 Negative NaN NaN NaN NaN NaN
Positive NaN NaN NaN NaN NaN
2013 Negative NaN NaN NaN NaN NaN
TSLA 2014 Positive NaN NaN NaN NaN NaN
2012 Negative NaN NaN NaN NaN NaN
2013 Positive NaN NaN NaN NaN NaN
2014 Positive NaN NaN NaN NaN NaN
You can flatten nested dictionaries 2 times for tuples for keys and pass to DataFrame.from_dict
:
d1 = {(k1, k2, k3): v3
for k1, v1 in d.items()
for k2, v2 in v1.items()
for k3, v3 in v2.items()}
df = pd.DataFrame.from_dict(d1, orient='index')
#alternative
#df = pd.DataFrame(d1).T
print (df)
lowPrice lowDate highPrice highDate change
TSLA 2011 negative 185.16 05/27/19 365.71 12/10/18 -0.49
2012 negative 185.16 05/27/19 365.71 12/10/18 -0.49
2013 negative 32.91 01/07/13 37.24 03/26/12 -0.12
positive 32.91 01/07/13 190.9 09/23/13 4.8
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With