Создать Pandas DataFrame из словаря - PullRequest
0 голосов
/ 05 сентября 2018

Я пытался преобразовать словарь {'a': [1, 2, 3], 'b': [4, 5]} в:

 0           | 1           | 
|:-----------|------------:| 
| a          |        1    |  
| a          |        2    |   
| a          |        3    |     
| b          |        4    |    
| b          |        5    |     

Но не нашел способа достичь этого без изменения самого словаря. Есть ли более простой способ сделать это? Любая помощь будет по достоинству оценена! Спасибо!

Ответы [ 3 ]

0 голосов
/ 05 сентября 2018

вы можете расширить dict в список кортежей, а затем преобразовать в df следующим образом;

ddd = {'a': [1, 2, 3], 'b': [4, 5]}
df = pd.DataFrame([(k,v) for k in ddd for v in ddd[k]])
0 голосов
/ 05 сентября 2018

Использование pd.DataFrame.from_dict

pd.DataFrame.from_dict(d,'index').stack().reset_index(level=0)
Out[194]: 
  level_0    0
0       a  1.0
1       a  2.0
2       a  3.0
0       b  4.0
1       b  5.0
0 голосов
/ 05 сентября 2018

Вы можете использовать numpy.concatenate и numpy.repeat:

import numpy as np

d = {'a': [1, 2, 3], 'b': [4, 5]}

values = np.concatenate(list(d.values()))
lens = list(map(len, d.values()))

res = pd.DataFrame({0: np.repeat(list(d), lens),
                    1: values})

Результат

   0  1
0  a  1
1  a  2
2  a  3
3  b  4
4  b  5

Это кажется сложнее, чем должно быть, но помните, что вам нужно создавать массивы для каждой серии / столбца. По сути, нам нужно повторить ключи словаря для серии 0 и объединить значения словаря для серии 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...