Разделение словаря на существующие столбцы - PullRequest
1 голос
/ 05 марта 2019

Предположим, у меня есть фрейм данных pd.DataFrame({'a':nan, 'b':nan, 'c':{'a':1, 'b':2},{'a':4, 'b':7, 'c':nan}, {'a':nan, 'b':nan, 'c':{'a':6, 'b':7}}).Я хочу взять значения из ключей в словаре в столбце c и разобрать их в ключи a и b.

Ожидаемый результат:

   a                   b                  c
0  1                   2      {'a':1, 'b':2}
1  4                   7                 nan
2  6                   7      {'a':6, 'b':7}

Iзнаю, как это сделать для создания новых столбцов, но это не та задача, которая мне нужна для этого, поскольку a и b имеют соответствующую информацию, требующую обновления с c.Я не смог найти ничего, имеющего отношение к этой задаче.

Любые предложения по эффективному методу будут приветствоваться.

** РЕДАКТИРОВАТЬ **

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

a                      b          c
0  nan                 nan        [{'a':1, 'b':2}, {'a':6, 'b':7}] 
1  4                   7          nan

, и мне нужно иметь вывод, как можно меньше шагов, в соответствии с

   a                 b        c
0  1                 2        {'a':1, 'b':2} 
1  4                 7        nan
2  6                 7        {'a':6, 'b':7}  

Спасибо!

Ответы [ 2 ]

1 голос
/ 05 марта 2019

Это работает:

def func(x):
    d = eval(x['c'])
    x['a'] = d['a']
    x['b'] = d['b']
    return x


df = df.apply(lambda x : func(x), axis=1)
0 голосов
/ 05 марта 2019

Как насчет этого:

for t in d['c'].keys():
     d[t] = d['c'][t]

Вот пример:

>>> d = {'a': '', 'b': '', 'c':{'a':1, 'b':2}}
>>> d
{'a': '', 'b': '', 'c': {'a': 1, 'b': 2}}
>>> d.keys()
dict_keys(['a', 'b', 'c'])
>>> d['c'].keys()
dict_keys(['a', 'b'])
>>> for t in d['c'].keys():
...     d[t] = d['c'][t]
... 
>>> d
{'a': 1, 'b': 2, 'c': {'a': 1, 'b': 2}}
>>> 

Мы можем превратить его в функцию:

>>> def updateDict(dict, sourceKey):
...     for targetKey in dict[sourceKey].keys():
...             dict[targetKey] = dict[sourceKey][targetKey]
... 
>>> d = {'a': '', 'b': '', 'c':{'a':1, 'b':2}}
>>> def updateDict(dict, sourceKey):
...     for targetKey in dict[sourceKey].keys():
...             dict[targetKey] = dict[sourceKey][targetKey]
...     return dict
... 
>>> d
{'a': '', 'b': '', 'c': {'a': 1, 'b': 2}}
>>> updateDict(d, 'c')
{'a': 1, 'b': 2, 'c': {'a': 1, 'b': 2}}
>>> d = {'a': '', 'b': '', 'c':{'a':1, 'b':2, 'z':1000}}
>>> updateDict(d, 'c')
{'a': 1, 'b': 2, 'c': {'a': 1, 'b': 2, 'z': 1000}, 'z': 1000}
>>> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...