Pandas столбец dict разделен на новый столбец и строки - PullRequest
0 голосов
/ 25 мая 2018

У меня есть диктат в столбце данных pandas, ввод:

import pandas as pd
df = pd.DataFrame([{'A': {'k1': 10}}, {'A': {'k2': 20, 'k3': 30}}, {'A': {'k4': 15}}])

df
                        A
0             {u'k1': 10}
1  {u'k3': 30, u'k2': 20}
2             {u'k4': 15}

Я хотел бы разделить ключи и значения dict в столбце 'A' на новые столбцы и разделить на строки(зависит от количества ключей в dict), в основном вывод должен выглядеть так:

  keys  values
0   k1      10
1   k3      30
2   k2      20
3   k4      15

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Опция 1 (если у вас есть все уникальные ключи в под-словарях)
dict с collections.ChainMap

from collections import ChainMap   
dct = dict(ChainMap(*[i['A'] for i in d]))
pd.DataFrame(list(dct.items()), columns=['key', 'value'])

  key  value
0  k1     10
1  k4     15
2  k2     20
3  k3     30

Вариант 2 (если у вас могут быть дубликаты ключей)
itertools.chain.from_iterable

dct = list(itertools.chain.from_iterable([i['A'].items() for i in d]))
df = pd.DataFrame(dct, columns=['key', 'value'])

  key  value
0  k1     10
1  k2     20
2  k3     30
3  k4     15
0 голосов
/ 25 мая 2018

Используйте списки с разгоранием для кортежей и затем DataFrame contructor:

L = [(k1, v1) for k, v in df['A'].to_dict().items() for k1, v1 in v.items()]

df = pd.DataFrame(L, columns = ['keys','values'])
print (df)
  keys  values
0   k1      10
1   k2      20
2   k3      30
3   k4      15

Или создайте DataFrame и stack:

df = (pd.DataFrame(df['A'].values.tolist())
       .stack().reset_index(level=0, drop=True)
       .reset_index())
df.columns = ['keys','values']
print (df)
  keys  values
0   k1    10.0
1   k2    20.0
2   k3    30.0
3   k4    15.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...