web-dev-qa-db-ja.com

どうすればpython numpy adatetimeの範囲を作ることができます

入力ファイルのタイムスタンプがファイル名で指定された日時から数時間の形式である入力データがあります。

これは少し役に立たないので、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で立ち往生しています。

22
Melanie

NumPy Datetimes and Timedeltas を参照してください。基本的に、numpy.datetime64型を使用してNumPyで日時を表すことができます。これにより、値の範囲を指定できます。

datetime64型の有用性がはるかに低いNumPy 1.6の場合、適切なリスト内包表記を使用して日時を作成できます( 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)
14
nneonneo
_from datetime import datetime, timedelta

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

ここで重要なのは、astype(datetime)を使用することです。それ以外の場合、結果は_datetime64_になります。

22
Arc Shinus

最新のNumPyでは、これを行うことができます。

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]')
11
John Zwinck

@nneonneoソリューションは、

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

numPy配列操作のおかげ。 result配列には、dtype=object

より複雑な範囲については、 scikits.timeseries パッケージ(メンテナンスされなくなった)以上、 pandas パッケージのほとんどのscikits.timeseries。どちらのパッケージも古いバージョンのNumPy(1.5、1.6 ...)をサポートしています

8
Pierre GM

別の回答で述べたように、Numpy> 1.7の場合、Numpyの組み込み日時機能を使用できます。 Numpyのドキュメントの例には、ステップでの_np.arange_の使用が含まれていないため、次のようにします。

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

Numpyは、この結果のdtypeを_datetime64[h]_に設定します。 _dtype='datetime64[m]'_を使用して、これをより短い時間単位に明示的に設定できます。

バージョン1.8.1(および以前の予定)では、1時間より小さい結果配列にオフセットを追加しようとしても効果はありません。

  • timearray += np.timedelta64(10,'s')は変更されませんtimearray
  • timearray2 = timearray + np.timedelta64(10,'s')timearrayに10秒を追加し、_timearray2_のdtypeを_datetime64[s]_に変換します
7
Thav