将字典拆分为现有的列

时间:2019-03-05 15:40:10

标签: python pandas parsing dictionary

假设我有数据帧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列的字典中的键中获取值,并将它们解析为键ab中。

预期输出为:

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

我知道如何创建新列,但这不是我要做的任务,因为ab的相关信息需要从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 个答案:

答案 0 :(得分:1)

这有效:

call C:\Users\Tribic\Anaconda2\Scripts\activate.bat
call cd cmc\cmc\spiders\
call scrapy runspider cmc_job.py -o out3.csv

答案 1 :(得分:0)

如何?

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}
>>>