将带有None值的python列表转换为带有nan值的numpy数组

Aka*_*all 26 python numpy

我想转换包含数值和一个列表None值numpy.array,使得None与替代numpy.nan.

例如:

my_list = [3,5,6,None,6,None]

# My desired result: 
my_array = numpy.array([3,5,6,np.nan,6,np.nan]) 
Run Code Online (Sandbox Code Playgroud)

天真的方法失败了:

>>> my_list
[3, 5, 6, None, 6, None]
>>> np.array(my_list)
array([3, 5, 6, None, 6, None], dtype=object) # very limited 
>>> _ * 2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for *: 'NoneType' and 'int'

>>> my_array # normal array can handle these operations
array([  3.,   5.,   6.,  nan,   6.,  nan])
>>> my_array * 2
array([  6.,  10.,  12.,  nan,  12.,  nan])
Run Code Online (Sandbox Code Playgroud)

解决这个问题的最佳方法是什么?

Jai*_*ime 37

您只需显式声明数据类型:

>>> my_list = [3, 5, 6, None, 6, None]
>>> np.array(my_list, dtype=np.float)
array([  3.,   5.,   6.,  nan,   6.,  nan])
Run Code Online (Sandbox Code Playgroud)

  • 这种方法的问题在于它只适用于定义了 nan 的浮点数,而不适用于 dtype int。 (3认同)

Udo*_*ein 5

关于什么

my_array = np.array(map(lambda x: numpy.nan if x==None else x, my_list))
Run Code Online (Sandbox Code Playgroud)

  • 我说`x is None'是因为==可能会更[古怪](/sf/ask/997316141/) (2认同)