テクめも

プログラミング関連のちょっとしたTipsなどを書いています。

Noneを含むリストをNumPyに変換するときに注意すること

PythonでリストをNumPyに変換するとき、Noneが含まれる場合は型について少し注意が必要です。

型を指定しない

変換するときに、dtypeを指定しない場合はobjectになってしまいます。

>>> np.array([1, 2, None])
array([1, 2, None], dtype=object)

intを指定する

元のリストがintなので、intを指定しようとするとNoneがうまく変換されず、TypeErrorとなります。

>>> np.array( [1, 2, None], dtype=int)
TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'

floatを指定する(正しい方法)

Noneが含まれる場合は、元のリストがintの場合でもfloatを指定すると、正しく変換できます。

>>> np.array([1, 2, None], dtype=float)
array([ 1.,  2., nan])

これは、NumPyのNaNfloat型であることを意味し、実際に確かめることができます。

>>> type(np.nan)
<class 'float'>