2011-08-15 10 views
1

np.rec.fromrecordsへの単一呼び出しを使用して、タプルのリストをnumpy再配列に変換する際にNone値を処理する方法はありますか? (例えば-1整数の)私は欠損値になりたいものを知っていると仮定すると、私がキャッチし、以下の不自然な例を処理しない方法:処理numpy再変換への変換で値なし

import numpy as np 
a = [('Bob', 40, 3.14), ('Sue', 38, 6.28), ('Jim', None, 9.42)] 
dtype = [('NAME', 'S10'), ('AGE', np.int32), ('SCORE', np.float64)] 
try: 
    b = np.rec.fromrecords(a, dtype=dtype) 
except TypeError: 
    # Convert None to 0 for AGE field here instead of raising the error 
    raise TypeError('Caught a TypeError') 

私は上でこれをしなければならないであろうと推測しています再配列のどこかで真のTypeErrorが見つからないようにするために、フィールド単位で処理する必要があります。 を隔離する方法はありますか?この再変換を適用する再配列内の(つまり、どのフィールド)が必要ですか。私の本当のユースケースは、pyodbcレコードをnumpy再配列に変換することです。

+1

どのようなデータソース(Oracle、SQL Serverなど)に対してpyodbc呼び出しが行われ、クエリを変更できますか? – Bryan

+1

SQL Serverに対して。私はあなたが言っていることを理解していると思います。 CASTを使用してDB側でNULLを-1に変換します。それは理にかなっている。 – grovduck

答えて

1

リターン-1 NULL列値のため、このような何かをデータベースクエリを使用して:

SELECT COALESCE(ColumnName, -1) FROM Schema.Table; 

これは-1を返しますNULLですColumnNameに値のために、それ以外の場合は実際の値が返されます。必要に応じてCOALESCE hereのドキュメントこれにより、必要な列に対してのみNULL置換値を指定することができ、気にする必要がある例外のマスクをマスクしません。

+0

偉大な、助けてくれてありがとう。これは、私のユースケースでこれを処理するより合理的な方法のようです。 – grovduck

関連する問題