[英]How do I define a function to extract values from nested dictionary for each row in python
我在 dataframe 'df' 中有一个名为 'urls' 的列,每一行都包含嵌套字典和 URL 以及它是否是恶意的。 我只想为每一行提取嵌套字典的值。
0 {'url example 1': {'malicious': False}}
1 {'url example 2': {'malicious': False}}
通过定义 function,我想使用“应用”function 来获得每一行的结果。
这是我定义的示例 function。
def urlconcern(url):
try:
r = s.lookup_urls([url])
return r.values()
except:
pass
使用“应用”运行此 function
df['urls'].apply(urlconcern)
这只给出了下面带有圆括号的结果(奇怪)
0 ({'malicious': False})
1 ({'malicious': False})
期望的答案是
False
False
有什么办法可以做到吗?
给定 pandas 系列s
我假设它是 pandas 系列)
s = pd.Series([{'url example 1': {'malicious': False}},
{'url example 2': {'malicious': False}}])
您可以在next
中使用生成器表达式来查找嵌套字典的值。
out = s.apply(lambda url: next((v for d in url.values() for k,v in d.items()), None))
Output:
0 False
1 False
dtype: bool
但是,我不相信这是您正在寻找的东西,因为您在这里丢失了 url 信息。
这是 pandas dataframe 吗? 你实例化了吗? 您可能想看看这本字典是如何构造的,因为它应该更像
>>> df = {'url':['url example 1', 'url example 2', 'url example 3'], 'malicious': [False, False, True]}
>>> df = pd.DataFrame(df)
>>> df
url malicious
0 url example 1 False
1 url example 2 False
2 url example 3 True
然后做
>>> df[df['malicious'] == False]
url malicious
0 url example 1 False
1 url example 2 False
我知道这并不能准确回答您的问题,但它是使用 DataFrames 的标准方式,应该有助于您以后的工作流程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.