Skip to content Skip to sidebar Skip to footer

Convert Dictionaries To Dataframe

I am trying to convert this dictionary: data = ({'Jan 2018':1000},{'Feb 2018':1100},{'Mar 2018':1400},{'Apr 2018':700},{'May 2018':800}) data to dataframe like: date balance

Solution 1:

Here is my solution:

import pandas as pd

data = ({"Jan 2018":1000},{"Feb 2018":1100},{"Mar 2018":1400},{"Apr 2018":700},{"May 2018":800})

arr = [list(*d.items()) for d indata]

df = pd.DataFrame(arr, columns=['data', 'balance'])

you need get proper array from the tuple of dictionary before pass it to DataFrame.

Solution 2:

Try this

df=pd.DataFrame.from_dict({k:vfordindatafork,vind.items()},orient='index',columns=['balance']).rename_axis('date').reset_index()Out[477]:datebalance0Jan2018     10001Feb2018     11002Mar2018     14003Apr2018      7004May2018      800

Solution 3:

From the documentation of from_dict

orient : {‘columns’, ‘index’}, default ‘columns’

The “orientation” of the data. If the keys of the passed dict should be the columns of the resulting DataFrame, pass ‘columns’ (default). Otherwise if the keys should be rows, pass ‘index’.

Since you want your keys to indicate rows, changing the orient to index will give the result your want. However first you need to put your data in a single dictionary. This code will give you the result you want.

data = ({"Jan 2018":1000},{"Feb 2018":1100},{"Mar 2018":1400},{"Apr 2018":700},{"May 2018":800})

d = {}
for i indata:
    for k in i.keys():
        d[k] = i[k]

df = pd.DataFrame.from_dict(d, orient='index')

Solution 4:

What you have there is a tuple of single-element dictionaries. This is unidiomatic, and poor design. If all the dictionaries correspond to the same columns, then a list of tuples would do just fine.


Solutions

I believe the currently accepted answer relies on there being only one key:value pair in each dictionary. That’s unfortunate, since it automatically excludes most situations where this design makes any sense.


If, hypothetically, the "tuple of 1-element dicts" couldn't be changed, here is how I would suggest doing things:

import pandas as pd
import itertools as itt

raw_data = ({"Jan 2018": 1000}, {"Feb 2018": 1100}, {"Mar 2018": 1400}, {"Apr 2018": 700}, {"May 2018": 800})

data = itt.chain.from_iterable(curr.items() for curr in raw_data)

df = pd.DataFrame(data, columns=['date', 'balance'])

Here is the sensible alternative to all this.

import pandas as pd

data = [("Jan 2018", 1000), ("Feb 2018", 1100), ("Mar 2018", 1400), ("Apr 2018", 700), ("May 2018", 800)]

df = pd.DataFrame(data, columns=['date', 'balance'])

df:

       date  balance
0  Jan 2018     1000
1  Feb 2018     1100
2  Mar 2018     1400
3  Apr 2018      700
4  May 2018      800

It would probably be even better if those dates were actual date types, not strings. I will change that later.

Post a Comment for "Convert Dictionaries To Dataframe"