假设import jmespath
。让我们说我有一些数据:
In [3]: data=[{'foo':10}, {'foo':float('nan')}, {'foo':32}]
In [4]: data
Out[4]: [{'foo': 10}, {'foo': nan}, {'foo': 32}]
我想使用jmespath来计算nan节点的数量。我似乎无法得到它。我可以像这样计算非纳米节点:
jmespath.search('length([?@.foo.abs(@) >= `0`])',data)
我尝试过与nan
和NaN
进行比较,但这并不起作用,坦率地说它不应该因为nan不等于nan。但是,我没有看到is_nan()函数。我想我可以转换成字符串,然后比较它们?这似乎是最后的手段。是否有一些is_nan我没有看到记录?
答案 0 :(得分:0)
nan
(不是数字)的实例进行计数的查询not-expression
! (exclaimation point)和abs()
函数length()
函数对结果进行计数jmespath.compile('''[*].foo|[? !(abs(@) >= `0`)]|length([*])''').search(data)
type()
函数将nan
视为number
not-expression
和abs(@) greater-than or equal-to zero
对于nan
会返回true。invalid type for value
(例如字符串),则Jmespath会出现abs()
错误。