如何用NumPy语法过滤元素为字典的数组中isActive=True的元素?
纯NumPy语法过滤字典数组中
isActive为True的元素 问题场景
给定元素为字典的NumPy数组data,需要过滤出仅isActive字段等于True的元素,要求使用纯NumPy语法实现,禁止转为Python普通列表或使用pandas处理。
示例数据
import numpy as np import math data = [ {'Account': '111', 'RIC': 'AAPL.OQ', 'Position': 100, 'isActive': True, 'Rating': math.nan}, {'Account': '111', 'RIC': 'MSFT.OQ', 'Position': 200, 'isActive': False, 'Rating': 73}, {'Account': '111', 'RIC': 'IBM.N', 'Position': 300, 'isActive': True, 'Rating': math.inf}, {'Account': '222', 'RIC': 'AAPL.OQ', 'Position': 1000, 'isActive': False, 'Rating': 89}, {'Account': '222', 'RIC': 'MSFT.OQ', 'Position': 2000, 'isActive': True, 'Rating': np.nan}, {'Account': '222', 'RIC': 'IBM.N', 'Position': 3000, 'isActive': True, 'Rating': 59} ] data = np.array(data)
解决方案
利用np.vectorize将提取isActive值的逻辑批量应用到数组每个元素,生成布尔掩码后过滤数组:
# 生成布尔掩码:提取每个字典的isActive值 is_active_mask = np.vectorize(lambda x: x['isActive'])(data) # 用掩码过滤原数组,得到目标结果 filtered_data = data[is_active_mask]
验证结果
执行以下代码可查看过滤后的元素:
for item in filtered_data: print(item)
输出结果:
{'Account': '111', 'RIC': 'AAPL.OQ', 'Position': 100, 'isActive': True, 'Rating': nan} {'Account': '111', 'RIC': 'IBM.N', 'Position': 300, 'isActive': True, 'Rating': inf} {'Account': '222', 'RIC': 'MSFT.OQ', 'Position': 2000, 'isActive': True, 'Rating': nan} {'Account': '222', 'RIC': 'IBM.N', 'Position': 3000, 'isActive': True, 'Rating': 59}
内容的提问来源于stack exchange,提问作者user3761555
相关产品推荐
相关产品推荐

