Python 从dataframe列中的字典中提取值

Python 从dataframe列中的字典中提取值,python,pandas,dictionary,dataframe,Python,Pandas,Dictionary,Dataframe,我正在做一件非常简单的事情:向数据库请求一些东西,这件事会给我一本[巨大的]字典。没关系,我喜欢演讲。但我不是Python方面的专家 我的问题是我想把这个字典转换成一个数据帧。没关系,我在谷歌上搜索了一下,效果不错。但是在我的字典里,我有其他的字典(是的,我知道…) 我想从那些字典(它们进入我的数据帧)中获取“value”键的值 这是一个样本和我试过的。谢谢,这是事先准备好的 [[res是我的大字典,是查询的结果]] res: {'head': {'vars': ['id', 'marque',

我正在做一件非常简单的事情:向数据库请求一些东西,这件事会给我一本[巨大的]字典。没关系,我喜欢演讲。但我不是Python方面的专家

我的问题是我想把这个字典转换成一个数据帧。没关系,我在谷歌上搜索了一下,效果不错。但是在我的字典里,我有其他的字典(是的,我知道…)

我想从那些字典(它们进入我的数据帧)中获取“value”键的值

这是一个样本和我试过的。谢谢,这是事先准备好的

[[res是我的大字典,是查询的结果]]

res:

{'head': {'vars': ['id', 'marque', 'modele']},
 'results': {'bindings': [{'id': {'type': 'literal', 'value': '1362'},
    'marque': {'type': 'literal', 'value': 'PEUGEOT'},
    'modele': {'type': 'literal', 'value': '206'}},....
pd.DataFrame(res['results']['bindings'],columns=res['head']['vars']):

如您所见,我的数据框中还有另一本字典!我想要的是以一种有效的方式从“value”键获取值(事实上,我知道如何使用big for语句来实现这一点,但请不要使用python)


我尝试了
res['results']['bindings']['values']
,或
res['results']['bindings'].values()(或.values)
,以及数据框架上的其他东西,如
df.values()['value']=df.values()
,但它不起作用。

IIUC,您可以使用
applymap
并从每个字典中提取与
value
键关联的值

import operator

df = pd.DataFrame(res['results']['bindings'], columns=res['head']['vars']) 
df = df.applymap(operator.itemgetter('value'))
这是在假设每个单元格值都是字典的情况下操作的


您的某些词典可能不包含
作为键。在这种情况下,需要使用
dict.get

df = df.applymap(lambda x: x.get('value', np.nan) \
                        if isinstance(x, dict) else np.nan)

这也将处理当
x
不是
dict

IIUC时出现的潜在问题,您可以使用
applymap
并从每个字典中提取与
value
键相关的值

import operator

df = pd.DataFrame(res['results']['bindings'], columns=res['head']['vars']) 
df = df.applymap(operator.itemgetter('value'))
这是在假设每个单元格值都是字典的情况下操作的


您的某些词典可能不包含
作为键。在这种情况下,需要使用
dict.get

df = df.applymap(lambda x: x.get('value', np.nan) \
                        if isinstance(x, dict) else np.nan)
这还将处理当
x
不是
dict
时出现的潜在问题,您可以使用它完美地添加
NaN
s:

d = {'head': {'vars': ['id', 'marque', 'modele']},
 'results': {'bindings': [{'id': {'type': 'literal', 'value': '1362'},
    'marque': {'type': 'literal', 'value': 'PEUGEOT'},
    'modele': {'type': 'literal', 'value': '206'}},{'id': {'type': 'literal', 'value': '1362'},
    'marque': {'type': 'literal', 'value': 'PEUGEOT'}}]}}

您可以使用以下选项完美地添加
NaN
s:

d = {'head': {'vars': ['id', 'marque', 'modele']},
 'results': {'bindings': [{'id': {'type': 'literal', 'value': '1362'},
    'marque': {'type': 'literal', 'value': 'PEUGEOT'},
    'modele': {'type': 'literal', 'value': '206'}},{'id': {'type': 'literal', 'value': '1362'},
    'marque': {'type': 'literal', 'value': 'PEUGEOT'}}]}}


它起作用了。而且效率很高。谢谢!:)Clément Edit:谢谢你对答案第二部分的建议,它是有用的,是的,它可以发生。@ClementB很高兴它有帮助。它很有效。而且效率很高。谢谢!:)Clément Edit:谢谢你对答案第二部分的建议,它是有用的,是的,它可以发生。@ClementB很高兴它有帮助。