Python 从数据行中的嵌套字典中获取项值,并去掉其余的项

Python 从数据行中的嵌套字典中获取项值,并去掉其余的项,python,pandas,triples,allennlp,Python,Pandas,Triples,Allennlp,我实现了,它提取嵌入嵌套字符串中的主语、谓语、宾语信息(以ARG0、V、ARG1等形式)。但是,我需要确保每个输出都链接到原始句子的给定ID 我生成了以下数据帧,其中OIE output包含allennlp算法的原始输出 电流输出: 句子 身份证件 OIE输出 “那个女孩去看电影了” “abcd” {'verbs':[{'verbs':'go','description':'[ARG0:The girl][V:go][ARG1:to The cinema]} “他是对的,他是一名工程师” “ef

我实现了,它提取嵌入嵌套字符串中的主语、谓语、宾语信息(以ARG0、V、ARG1等形式)。但是,我需要确保每个输出都链接到原始句子的给定
ID

我生成了以下数据帧,其中
OIE output
包含allennlp算法的原始输出

电流输出:

句子 身份证件 OIE输出 “那个女孩去看电影了” “abcd” {'verbs':[{'verbs':'go','description':'[ARG0:The girl][V:go][ARG1:to The cinema]} “他是对的,他是一名工程师” “efgh” {'verbs':[{'verbs':'is','description':'[ARG0:He][V:is][ARG1:right]},{'verbs':'is','description':'[ARG0:He][V:is][ARG1:an engineer]}
你的第二个想法应该可以做到:

导入ast
df[“OIE三元组”]=df[“OIE输出”].apply(ast.literal\u eval)
df[“OIE三元组”]=df[“OIE三元组”]。应用(lambda val:[a_dict[“description”]
对于val[“动词”]]中的dict
df=df.分解(“OIE三元组”).下降(columns=“OIE output”)
如果
“OIE输出”
值不是真正的
dict
s而是
str
ings,我们通过
ast.literal\u eval
将其转换为
dict
s。(因此,如果它们是
dict
s,您可以跳过前两行)

然后,我们得到一个系列中每个
val
ue的列表,该系列由
最外层的dict键的
“description”
组成,由
“verbs”

最后,
分解
说明
列出并
删除
“OIE输出”
列,因为它不再需要

得到

                              sentence      ID                                      OIE Triples
0        'The girl went to the cinema'  'abcd'  [ARG0: The girl] [V: went] [ARG1:to the cinema]
1  'He is right and he is an engineer'  'efgh'                  [ARG0: He] [V: is] [ARG1:right]
1  'He is right and he is an engineer'  'efgh'            [ARG0: He] [V: is] [ARG1:an engineer]

不知道“ast”方法。干杯我还找到了另一种方法来解决这个问题,这更费时,但效果很好:用“to_dict”将初始df转换为dict;弹出不需要的嵌套项,并转换回新的df。