假设我有数据帧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}
我知道如何创建新列,但这不是我要做的任务,因为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}
谢谢!
答案 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}
>>>