2012-03-08 19 views
8

numpyで整数の日付をdatetime64に変換する適切な方法は何ですか?私は試した:Numpyでfloat32配列をdatetime64に変換する。1.6.1

import numpy 
a = numpy.array([20090913, 20101020, 20110125]) 
numpy.datetime64(a.astype("S8")) 

しかし、間違った変換を取得します。 numpy.loadtxtを使ってnumpy.datetime64オブジェクトとして正しく読み込むのはどうですか(彼らはcsvファイルから来ています)?

答えて

5

奇妙なことに、これは動作します:numpy.datetime64(a.astype("S8").tolist())を、これはそうではない:numpy.datetime64(a.astype("S8"))。最初の方法は、まだnumpy.array([numpy.datetime64(str(i)) for i in a])より複雑ではありません。私はなぜthis questionで尋ねました。

5

datetime64は、yyyy-mm-ddという形式の文字列が必要ですが、型変換はyyyymmddの形式の文字列を生成することが問題です。私はこのような何かを示唆している:それは私のために働いていないが(私はnumpyの1.6.1を持っている)

conversion = lambda x: "%s-%s-%s" % (x[:4], x[4:6], x[6:]) 
np_conversion = numpy.frompyfunc(conversion,1,1) 
b = np_conversion(a.astype('S10')) 
numpy.datetime64(b) 

を、それがメッセージ「:このタイプのために実装されていませんNotImplementedError」で失敗します。期待される形式で日付を提供するために、

numpy.datetime64(numpy.array([conversion(str(x)) for x in a], dtype="S10")) 

...またはあなたの入力を前処理:それは1.7で実装されていない限り、私は唯一の純粋なPythonのソリューションを提案することができます。

編集:私もvectorizeを使用して、代替ソリューションを提供することができますが、私はそれがどのように動作するかを非常によく知っていないので、私は間違って何が起こっているのか分からない:いくつかのために

>>> conversion = vectorize(lambda x: "%s-%s-%s" % (x[:4], x[4:6], x[6:]), otypes=['S10']) 
>>> conversion(a.astype('S10')) 
array(['2009', '2010', '2011'], 
     dtype='|S4') 

なぜなら、それはotypesを無視して|S10の代わりに|S4を出力する理由です。申し訳ありませんが、これ以上はお手伝いできませんが、これは他のソリューションを検索する際の出発点となります。

更新: OPのフィードバックのおかげで、私は新しい可能性を考えました。予想通り、これは動作するはずです:

>>> conversion = lambda x: numpy.datetime64(str(x)) 
>>> np_conversion = numpy.frompyfunc(conversion, 1, 1) 
>>> np_conversion(a) 
array([2009-09-13 00:00:00, 2010-10-20 00:00:00, 2011-01-25 00:00:00], dtype=object) 

# Works too: 
>>> conversion = lambda x: numpy.datetime64("%s-%s-%s" % (x/10000, x/100%100, x%100)) 

ダッシュの有無にかかわらず正常に動作datetime64、どのように、この場合は奇妙なが...

+0

+1私から;あなたの最初の解決策は私のためにうまくいくようです(NumPy 2.0開発者)。 – doug

+0

必要なフォーマットにダッシュが付いていると、numpy.datetime64( '20090921')が動作するのはなぜですか? – Benjamin

+0

@Benjaminは本当に奇妙です...しかし、あなたのコメントは私に新しいアイデアを与えました。私の更新された答えを試してください。 – mgibsonbr

関連する問題