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
、どのように、この場合は奇妙なが...
+1私から;あなたの最初の解決策は私のためにうまくいくようです(NumPy 2.0開発者)。 – doug
必要なフォーマットにダッシュが付いていると、numpy.datetime64( '20090921')が動作するのはなぜですか? – Benjamin
@Benjaminは本当に奇妙です...しかし、あなたのコメントは私に新しいアイデアを与えました。私の更新された答えを試してください。 – mgibsonbr