你如何检查python jmespath中的nan?

时间:2018-02-12 02:13:50

标签: python nan jmespath

假设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)

我尝试过与nanNaN进行比较,但这并不起作用,坦率地说它不应该因为nan不等于nan。但是,我没有看到is_nan()函数。我想我可以转换成字符串,然后比较它们?这似乎是最后的手段。是否有一些is_nan我没有看到记录?

1 个答案:

答案 0 :(得分:0)

上下文

  • python 2.x或python 3.x
  • jmespath查询

问题

  • 如何构造一个对nan(不是数字)的实例进行计数的查询

解决方案

  • 结合使用Jmespath not-expression ! (exclaimation point)abs()函数
  • 使用jmespath length()函数对结果进行计数

示例

jmespath.compile('''[*].foo|[? !(abs(@) >= `0`)]|length([*])''').search(data)

详细信息

  • Jmespath type()函数将nan视为number
  • 结合使用not-expressionabs(@) greater-than or equal-to zero对于nan会返回true。

陷阱

  • 如果将不兼容的类型传递给invalid type for value(例如字符串),则Jmespath会出现abs()错误。