web-dev-qa-db-ja.com

numpy datetime64をdatetimeに変換する方法

私は基本的にここに投稿された同じ問題に直面しています: datetime、Timestamp、datetime64間の変換

しかし、私はそれから満足のいく答えを見つけることができませんでした、私の質問はnumpy.datetime64タイプからdatetimeを抽出する方法です:

私が試してみると:

np.datetime64('2012-06-18T02:00:05.453000000-0400').astype(datetime.datetime)

それは私に与えた:1339999205453000000L

私の現在の解決策は、datetime64を文字列に変換してから再びdatetimeに変換することです。しかし、それはかなりばかげた方法のようです。

12
user6396

datetime、Timestamp、datetime64間の変換 からの借用

_In [220]: x
Out[220]: numpy.datetime64('2012-06-17T23:00:05.453000000-0700')

In [221]: datetime.datetime.utcfromtimestamp(x.tolist()/1e9)
Out[221]: datetime.datetime(2012, 6, 18, 6, 0, 5, 452999)
_

タイムゾーンの説明それは正しいと思います。むしろ不格好に見えます。

astype('O') is better (I think) than tolist()) `:

_In [294]: datetime.datetime.utcfromtimestamp(x.astype('O')/1e9)
Out[294]: datetime.datetime(2012, 6, 18, 6, 0, 5, 452999)
_

またはローカルで日時を取得するには:

_In [295]: datetime.datetime.fromtimestamp(x.astype('O')/1e9)
_

しかし、_test_datatime.py_ファイルでは https://github.com/numpy/numpy/blob/master/numpy/core/tests/test_datetime.py

他にもいくつかのオプションがあります。まず、一般的な_datetime64_を単位を指定する形式の1つに変換します。

_In [296]: x.astype('M8[D]').astype('O')
Out[296]: datetime.date(2012, 6, 18)

In [297]: x.astype('M8[ms]').astype('O')
Out[297]: datetime.datetime(2012, 6, 18, 6, 0, 5, 453000)
_

これは配列に対して機能します:

_In [303]: np.array([[x,x],[x,x]],dtype='M8[ms]').astype('O')[0,1]
Out[303]: datetime.datetime(2012, 6, 18, 6, 0, 5, 453000)
_
16
hpaulj

Timestamp IS datetime.datetimeのサブクラスなので、[4]は一般的に機能します。

In [4]: pd.Timestamp(np.datetime64('2012-06-18T02:00:05.453000000-0400'))
Out[4]: Timestamp('2012-06-18 06:00:05.453000')

In [5]: pd.Timestamp(np.datetime64('2012-06-18T02:00:05.453000000-0400')).to_pydatetime()
Out[5]: datetime.datetime(2012, 6, 18, 6, 0, 5, 453000)
8
Jeff