Словарь с несколькими значениями ключа для фрейма данных - PullRequest
0 голосов
/ 29 января 2019

Словарь выглядит так:

{'iphone': [12, 21666], 'a1': [6, 5859], 'J5': [15, 13862]}

Используя этот словарь, я хочу создать фрейм данных, который выглядит следующим образом:

    name   n1   n2
0  iphone  12   21666
1  a1       6   5859
2  J5      15   13862

Ответы [ 4 ]

0 голосов
/ 29 января 2019
a={'iphone': [12, 21666], 'a1': [6, 5859], 'J5': [15, 13862]}
df = pd.DataFrame(a).T
df.reset_index(inplace=True)
df.columns = ['name','n1','n2']
print(df)

вывод:

     name  n1     n2
0  iphone  12  21666
1      a1   6   5859
2      J5  15  13862

для сброса индекса требуется шаг без него, он будет принимать ['iphone', 'a1', 'J5'] в качестве индекса

0 голосов
/ 29 января 2019

Также вы можете просто сделать это, если имя вашего словаря d:

df = pd.DataFrame(d).T.reset_index()
df.columns = ['name','n1','n2']
0 голосов
/ 29 января 2019

Вы можете попробовать вот так.

df = pd.DataFrame({'iphone': [12, 21666], 'a1': [6, 5859], 'J5': [15, 13862]})
df.columns = ["name", "n1", "n2"]
print(df)
0 голосов
/ 29 января 2019

Использовать понимание списка с конструктором DataFrame:

d = {'iphone': [12, 21666], 'a1': [6, 5859], 'J5': [15, 13862]}

df = pd.DataFrame([([k] + v) for k, v in d.items()], columns=['name','n1','n2'])
#alternative
#df = pd.DataFrame([(k, *v) for k, v in d.items()], columns=['name','n1','n2'])
print (df)
     name  n1     n2
0  iphone  12  21666
1      a1   6   5859
2      J5  15  13862

Общее решение для списка со всеми длинами, не только 2:

df = pd.DataFrame([(k, *v) for k, v in d.items()])
#python 3.6+ with f-strings
df.columns = ['name'] + [f'n{x}' for x in df.columns[1:]]
#python bellow
#df.columns = ['name'] + ['n{}'.format(x) for x in df.columns[1:]]
print (df)
     name  n1     n2
0  iphone  12  21666
1      a1   6   5859
2      J5  15  13862

Или:

df = (pd.DataFrame.from_dict(d, orient='index')
                  .rename(columns=lambda x: x+1)
                  .add_prefix('n')
                  .rename_axis('name')
                  .reset_index())
print (df)
     name  n1     n2
0  iphone  12  21666
1      a1   6   5859
2      J5  15  13862
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...