问题描述
假设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吗?
1楼
语境
- python 2.x或python 3.x
- jmespath查询
问题
-
如何构造一个计算
nan
实例(不是数字)的查询
解
-
使用Jmespath
not-expression
与abs()
函数结合使用 -
使用jmespath
length()
函数对结果进行计数
例
jmespath.compile('''[*].foo|[? !(abs(@) >= `0`)]|length([*])''').search(data)
细节
-
Jmespath
type()
函数将nan
视为number
-
将
not-expression
与abs(@) greater-than or equal-to zero
结合使用,对于nan
返回true
陷阱
-
如果将不兼容的类型传递给
abs()
(例如字符串),则Jmespath会错误地invalid type for value
。