问题描述
假设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。