Skip to main content
 首页 » 编程设计

python之从 Pandas 数据框中提取字典值

2025年05月04日15zfyouxi

我需要从从 .json 文件导入的数据集中添加额外的功能。

这是它的样子:

f1 = pd.read_json('https://raw.githubusercontent.com/ansymo/msr2013-bug_dataset/master/data/v02/eclipse/short_desc.json') 
 
print(f1.head()) 
 
 
                                               short_desc 
1       [{'when': 1002742486, 'what': 'Usability issue... 
10      [{'when': 1002742495, 'what': 'API - VCM event... 
100     [{'when': 1002742586, 'what': 'Would like a wa... 
10000   [{'when': 1014113227, 'what': 'getter/setter c... 
100001  [{'when': 1118743999, 'what': 'Create Help Ind... 

本质上,我需要将“short_desc”作为列名,并在其正下方填充字符串值:“可用性问题...”

到目前为止,我已经尝试了以下方法:

f1['desc'] = pd.DataFrame([x for x in f1['short_desc']]) 
 
Wrong number of items passed 19, placement implies 1 

有没有不使用循环的简单方法来完成这个?有人能为这个新手指出正确的方向吗?

请您参考如下方法:

不要初始化数据框并尝试将其分配给列 - 列应该是 pd.Series。

你应该直接分配列表理解,就像这样:

f1['desc'] = [x[0]['what'] for x in f1['short_desc']] 

作为替代方案,我会提出一个不涉及任何 lambda 函数的解决方案,使用 operator 和 pd.Series.apply:

import operator 
 
f1['desc'] = f1.short_desc.apply(operator.itemgetter(0))\ 
                             .apply(operator.itemgetter('what')) 
print(f1.desc.head()) 
 
1           Usability issue with external editors (1GE6IRL) 
10                   API - VCM event notification (1G8G6RR) 
100       Would like a way to take a write lock on a tea... 
10000     getter/setter code generation drops "F" in "..... 
100001    Create Help Index Fails with seemingly incorre... 
Name: desc, dtype: object