Danny Coveney
Danny Coveney

Reputation: 57

Converting a Dictionary with Lists of Tuples into DataFrame in Python

I am attempting to converting a 2 key dictionary with lists of tuples as values into a pandas DataFrame. The data I am working with looks like this:

dictionary={'Week':[(week1,week2),(week3,week4)],'Numbers':[(number1,number2),(number3,number4)]}

Is there anyway to convert this into a pandas DataFrame that looks like:

Week   Numbers
week1  number1
week2  number2
week3  number3
week4  number4

I have tried forcing the dictionary into a DataFrame using pandas.DataFrame(dictionary) but I end up with one row with two very wide columns. Any guidance will be greatly appreciated!

Upvotes: 2

Views: 285

Answers (3)

Andrej Kesely
Andrej Kesely

Reputation: 195408

You can use .explode() function (from version 0.25.0+):

dictionary={'Week':[('week1','week2'),('week3','week4')],'Numbers':[('number1','number2'),('number3','number4')]}
df = pd.DataFrame(dictionary)
print(pd.concat([df.explode('Week')['Week'], df.explode('Numbers')['Numbers']], axis=1))

Prints:

    Week  Numbers
0  week1  number1
0  week2  number2
1  week3  number3
1  week4  number4

Upvotes: 3

Code Different
Code Different

Reputation: 93141

Using only list comprehension:

dictionary={'Week':[('week1','week2'),('week3','week4')],'Numbers':[('number1','number2'),('number3','number4')]}
pd.DataFrame({
    k: [t for tup in value for t in tup] for k, value in dictionary.items()
})

Or ndarray.flatten:

pd.DataFrame({
    k: np.array(value).flatten() for k, value in dictionary.items()
})

Upvotes: 3

anky
anky

Reputation: 75080

You can use itertools.chain.from_iterable to flatten the tuples for each keys and call the dataframe constructor:

import itertools
df = pd.DataFrame({k: [*itertools.chain.from_iterable(v)] for k,v in dictionary.items()})

    Week  Numbers
0  week1  number1
1  week2  number2
2  week3  number3
3  week4  number4

Upvotes: 4

Related Questions