在字符串数组中使用numpy无法找到nan条目

Pet*_*nch 5 python arrays numpy

无法在字符串数组中使用numpy查找nan条目,我的代码是:

for x in X_cat:
    if x == np.nan:
        print('Found')
Run Code Online (Sandbox Code Playgroud)

我知道事实上列表中有2个nan条目,但是代码运行时没有打印任何内容。如果将np.nan替换为“ nan”,则相同。我的最终目标是使用最常见的字符串替换nan。

Thi*_*eur 5

在字符串数组中,只能执行字符串比较。您必须以字符串格式初始化 nan。

nan_str = str_np.array([np.nan]).astype(str)[0]
Run Code Online (Sandbox Code Playgroud)

并通过初始化一个数组,就像你所描述的那样:

x = np.array(['hello', np.nan, 'world', np.nan], dtype=object)
Run Code Online (Sandbox Code Playgroud)

然后,您可以将它们替换nan为我认为最常见的字符串mostcommonstring

x[np.where(x.astype(str)==str_nan)]='mostcommonstring'
Run Code Online (Sandbox Code Playgroud)


Bat*_*eba 3

那是因为将任何东西与进行比较NaN包括 NaN, 都是False。所以即使xnp.nan,也print不会运行。(事实上​​,这曾经是一种可接受的检查某些东西是否存在的方法,因为NaN没有其他 IEEE754 浮点值具有该属性。)

用于np.isnan(x)检查是否xNaN

  • 问题是 isnan 不会在字符串上工作,如果我尝试: np.isnan('l'),我得到 TypeError: ufunc 'isnan' 不支持输入类型,并且输入无法安全地强制为任何支持的类型根据铸造规则“安全” (7认同)