0

I have this dictionary:

data = {'key1': [2, 6, 7], 
        'key2': [9, 5, 3]}

How can I convert it into this pandas dataframe

   key   value
0  key1  2
1  key1  6
2  key1  7
3  key2  9
4  key2  5
5  key2  3

?


I tried:

import pandas  as pd
data = {'key1': [2, 6, 7], 'key2': [9, 5, 3]}
df = pd.DataFrame(data.items())
print(df)

but it returns:

      0          1
0  key1  [2, 6, 7]
1  key2  [9, 5, 3]

I also tried:

import pandas  as pd
data = {'key1': [2, 6, 7], 'key2': [9, 5, 3]}
df = pd.DataFrame.from_dict(data)
print(df)

but it returns:

   key1  key2
0     2     9
1     6     5
2     7     3
Franck Dernoncourt
  • 77,520
  • 72
  • 342
  • 501

3 Answers3

3

You could use pd.melt() as well

df = df.melt(var_name="key", value_name="value")

    key  value
0  key1      2
1  key1      6
2  key1      7
3  key2      9
4  key2      5
5  key2      3
Jamiu S.
  • 5,257
  • 5
  • 12
  • 34
2

Update

A more pythonic way:

>>> pd.DataFrame([(k, v) for k, l in data.items() for v in l],
                 columns=['key', 'value'])
    key  value
0  key1      2
1  key1      6
2  key1      7
3  key2      9
4  key2      5
5  key2      3

One way with pd.Series:

>>> pd.Series(data, name='value').explode().rename_axis('key').reset_index()
    key value
0  key1     2
1  key1     6
2  key1     7
3  key2     9
4  key2     5
5  key2     3
Corralien
  • 109,409
  • 8
  • 28
  • 52
2

You can use explode() after this code:

import pandas  as pd
data = {'key1': [2, 6, 7], 'key2': [9, 5, 3]}
df = pd.DataFrame(data.items())
df = df.explode(column=1)

df output:

      0  1
0  key1  2
0  key1  6
0  key1  7
1  key2  9
1  key2  5
1  key2  3
Marcelo Paco
  • 2,732
  • 4
  • 9
  • 26