2017-02-22 12 views
0

ナンシーint配列は欠損値を格納できません。欠損値を持つint配列numpy

>>> import numpy as np 
>>> np.arange(10) 
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) 
>>> myArray = np.arange(10) 
>>> myArray.dtype 
dtype('int32') 

>>> myArray[0] = None 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType' 

>>> myArray.astype(dtype = 'float') 
array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9.]) 
>>> myFloatArray = myArray.astype(dtype = 'float') 
>>> myFloatArray[0] = None 

>>> myFloatArray 
array([ nan, 1., 2., 3., 4., 5., 6., 7., 8., 9.]) 

パンダはこれについてドキュメント - Caveats and Gotchas, Support for int NAで警告します。 Wes McKinneyもこの点を繰り返し述べていますstack question

欠損値をint配列に格納する必要があります。私はさまざまなサイズのintだけを受け入れるように設定したデータベースに行を挿入しています。

現時点では、int型とNone型の両方を要素として保持できるオブジェクトとして配列を格納しています。

>>> myArray.astype(dtype = 'object') 
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=object) 
>>> myObjectArray = myArray.astype(dtype = 'object') 
>>> myObjectArray[0] = None 
>>> myObjectArray 
array([None, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=object) 

これは、大量のデータセットではメモリが大量で時間がかかるようです。 numpyの開発が進んでいる間に誰かがより良い解決策を持っているのだろうかと思っていました。

+1

'numpy.ma.MaskedArray'についてはどうですか? – MSeifert

+0

興味深い。それがパンダで動作するかどうか知っていますか? – Nirvan

+1

ちょっとハッキリかもしれません。それらの欠損値を埋めるために指定された整数を割り当てることはできませんか?欠損値のみを埋めるために、このような整数値を予約することができます。なぜあなたは欠損値の代わりに 'None'だけを挿入したいのですか? – kmario23

答えて

0

私のデータフレームの欠損値をすべてNone型に変換する非常に簡単な方法が見つかりました。 .where方法

mydata = mydata.where(pd.notnull(mydata), None) 

それは私が前にやっていたものよりも、集中はるかに少ないメモリです。

関連する問題