2012-08-27 3 views
12

私は入力ファイルにファイル名に指定された日付時刻から時間形式のタイムスタンプを持ついくつかの入力データを持っています。どうすればpython numpyをdatetimeの範囲にすることができますか

これは少し役に立たないので、私はそれをpython datetime.datetimeオブジェクトに変換し、それをnumpy配列に入れる必要があります。私はforループを書くことができますが、次のようなことをしたいと思います:

numpy.arange(datetime.datetime(2000, 1,1), datetime.datetime(2000, 1,2), datetime.timedelta(hours=1)) 

これはTypeErrorをスローします。

これはできますか?私はPython 2.6とnumpy 1.6.1で立ち往生しています。

+0

も参照してください。http://stackoverflow.com/questions/993358/creating-a-range-of-dates-in-python – nneonneo

答えて

8

NumPy Datetimes and Timedeltasを参照してください。基本的には、numpy.datetime64タイプを使用して数値の範囲を指定することができます。あまり便利datetime64タイプを持っているnumpyの1.6については、

、あなたは日付時刻を構築するために、適切なリスト内包を使用することができます(また、Creating a range of dates in Python参照):

base = datetime.datetime(2000, 1, 1) 
arr = numpy.array([base + datetime.timedelta(hours=i) for i in xrange(24)]) 

これは

array([2000-01-01 00:00:00, 2000-01-01 01:00:00, 2000-01-01 02:00:00, 
    2000-01-01 03:00:00, 2000-01-01 04:00:00, 2000-01-01 05:00:00, 
    2000-01-01 06:00:00, 2000-01-01 07:00:00, 2000-01-01 08:00:00, 
    2000-01-01 09:00:00, 2000-01-01 10:00:00, 2000-01-01 11:00:00, 
    2000-01-01 12:00:00, 2000-01-01 13:00:00, 2000-01-01 14:00:00, 
    2000-01-01 15:00:00, 2000-01-01 16:00:00, 2000-01-01 17:00:00, 
    2000-01-01 18:00:00, 2000-01-01 19:00:00, 2000-01-01 20:00:00, 
    2000-01-01 21:00:00, 2000-01-01 22:00:00, 2000-01-01 23:00:00], dtype=object) 
+0

私がnumpy 1.7しか持っていなかった場合、これが答えになります。しかし、私は1.6.1を持っているようですので、この例はうまくいきません。 – Melanie

+0

1.6で動作するメソッドを追加しました。 – nneonneo

+0

また、出力する必要があるdatetimeと互換性があります。ありがとう! – Melanie

5

を生成@nneonneo解は簡略化できることに注意してください。

result = first_date + np.arange(24) * datetime.timedelta(hours=1) 

NumPy配列操作のおかげで。配列resultdtype=objectです。より複雑な範囲については

、あなたはscikits.timeseriesパッケージ(もはや維持)以上、scikits.timeseriesのアイデアのほとんどを再実装 pandasパッケージに興味があるかもしれません。両方のパッケージがnumpyのの古いバージョン(1.5、1.6 ...)

+0

ありがとうございます - 私は仕事全体にパンダを使っていたはずです。次回は:-) – Melanie

13
t = np.arange(datetime(1985,7,1), datetime(2015,7,1), timedelta(days=1)).astype(datetime) 

をサポートし、ここで重要な点は、それ以外の結果はdatetime64なり、astype(datetime)を使用することです。

+0

これははるかにいいです – josh

3

Numpy> 1.7の場合は、Numpyの組み込みの日時機能を使用することができます。 numpyのドキュメントの例では、ステップをnp.arangeを使用して含まれていませんので、ここでは一つだ:

timearray = np.arange('2000-01-01', '2000-01-02',np.timedelta64(1,'h'), dtype='datetime64')

numpyのはdatetime64[h]に、この結果のDTYPEを設定します。 dtype='datetime64[m]'でこれを明示的に小さな時間単位に設定することができます。

バージョン1.8.1では、1時間未満のオフセットを結果配列に追加しようとすると効果がありません。

  • timearray += np.timedelta64(10,'s')timearrayに10秒を追加し、あなたがこれを行うことができます現代のnumpyのでdatetime64[s]
3

からtimearray2のDTYPE変換しますtimearray

  • timearray2 = timearray + np.timedelta64(10,'s')変更されません:

    np.arange(np.datetime64('2017-01-01'), np.datetime64('2017-01-08')) 
    

    をそしてそれはあなたに与えます:

    array(['2017-01-01', '2017-01-02', '2017-01-03', '2017-01-04', 
         '2017-01-05', '2017-01-06', '2017-01-07'], dtype='datetime64[D]') 
    
  • 関連する問題