从集合中删除NaN值

Bra*_*ell 12 python

是否可以轻松删除Python Set对象的NaN值?鉴于NaN值不等于任何值(float('nan') is float('nan')也是False),您最终可以在Set中得到许多NaN值.

>>> a = set( (float('nan'), float('nan'), 'a') )
>>> a
{nan, nan, 'a'}
Run Code Online (Sandbox Code Playgroud)

最好的我可以用它来定义像math.isnan这样的函数,但是它可以容忍非浮点类型,例如:

def my_isnan(x):
    try:
        return math.isnan(x)
    except TypeError:
        return False
Run Code Online (Sandbox Code Playgroud)

然后你可以使用这样的集合理解:

>>> {x for x in a if not my_isnan(x)}
{'a'}
Run Code Online (Sandbox Code Playgroud)

DSM*_*DSM 14

在实践中,您可以看一下这样nan != nan一个事实:作为一个功能,而不是一个错误:

>>> a = {float('nan'), float('nan'), 'a'}
>>> a
{nan, nan, 'a'}
>>> {x for x in a if x==x}
{'a'}
Run Code Online (Sandbox Code Playgroud)

从积极的方面来说,不需要辅助功能.从消极方面来说,如果你有一个非纳米物体也不等于它自己,你也会删除它.


Paw*_*erg 7

使用熊猫的pd.notna(),例如:

In [219]: import pandas as pd

In [220]: a = set((float('nan'), float('nan'), 'a'))

In [221]: a = {x for x in a if pd.notna(x)}

In [222]: a
Out[222]: {'a'}
Run Code Online (Sandbox Code Playgroud)