如何从Python中的字符串列表中删除numpy nan?

Joh*_*ews 5 python numpy python-3.x

我有一个字符串列表

x = ['A', 'B', nan, 'D']
Run Code Online (Sandbox Code Playgroud)

并希望删除nan.

我试过了:

x = x[~numpy.isnan(x)]
Run Code Online (Sandbox Code Playgroud)

但这只有在包含数字时才有效.我们如何在Python 3+中为字符串解决这个问题?

Kas*_*mvd 5

如果你有一个numpy的数组,你可以简单地检查的项目是不是字符串nan,但如果你有一个列表,你可以检查身份isnp.nan因为它是一个单独的对象.

In [25]: x = np.array(['A', 'B', np.nan, 'D'])

In [26]: x
Out[26]: 
array(['A', 'B', 'nan', 'D'], 
      dtype='<U3')

In [27]: x[x != 'nan']
Out[27]: 
array(['A', 'B', 'D'], 
      dtype='<U3')


In [28]: x = ['A', 'B', np.nan, 'D']

In [30]: [i for i in x if i is not np.nan]
Out[30]: ['A', 'B', 'D']
Run Code Online (Sandbox Code Playgroud)

或者作为一个功能方法,如果你有一个python列表:

In [34]: from operator import is_not

In [35]: from functools import partial

In [37]: f = partial(is_not, np.nan)

In [38]: x = ['A', 'B', np.nan, 'D']

In [39]: list(filter(f, x))
Out[39]: ['A', 'B', 'D']
Run Code Online (Sandbox Code Playgroud)