当前位置: 代码迷 >> python >> 如何在python jmespath中检查nan?
  详细解决方案

如何在python jmespath中检查nan?

热度:72   发布时间:2023-07-16 10:34:28.0

假设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吗?

语境

  • 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-expressionabs(@) greater-than or equal-to zero结合使用,对于nan返回true

陷阱

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