Reputation: 57
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
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
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
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