NumPy
前回、PythonのNumPyで全ての要素が任意の値である配列を作成する方法(np.full)を紹介しました。
今回はNumPyで日時を扱うnp.datetime64の使い方を、その中でも特にnp.arangeを使って連続した日時の作成方法を紹介します。
それでは始めていきましょう。
np.datetime64での日時の作成方法
まずはnp.datetime64で日時を作成するには「np.datetime64(“日時”)」とします。
ただし日時の書き方は決まっており、「西暦-月-日 時:分:秒」、もしくは「西暦-月-日T時:分:秒」です。
import numpy as np
a = np.datetime64("2024-01-10 10:11:12")
print(a)
print(a.dtype)
実行結果
2024-01-10T10:11:12
datetime64[s]
import numpy as np
b = np.datetime64("2024-01-10T10:11:12")
print(b)
print(b.dtype)
実行結果
2024-01-10T10:11:12
datetime64[s]
「datetime64[s]」は秒の単位まで認識されていることを示しています。
時間を含めず、年月日だけでも大丈夫です。
import numpy as np
c = np.datetime64("2024-01-10")
print(c)
print(c.dtype)
実行結果
2024-01-10
datetime64[D]
上の例では日付まで認識できているので「datetime64[D]」となっています。
フォーマットが異なる場合は間違って認識してしまうことがあるので注意です。
import numpy as np
d = np.datetime64("20240110")
print(d)
print(d.dtype)
実行結果
20240110
datetime64[Y]
ハイフンなしで続けて書いてしまうと全てが「Y(年)」として認識されてしまいます。
フォーマットが正しければ日時をどこで止めても正しく認識してくれます。
import numpy as np
e = np.datetime64("2024-01-10T10:11:12")
f = np.datetime64("2024-01-10T10:11")
g = np.datetime64("2024-01-10T10")
h = np.datetime64("2024-01-10")
i = np.datetime64("2024-01")
j = np.datetime64("2024")
print(e)
print(e.dtype)
print(f)
print(f.dtype)
print(g)
print(g.dtype)
print(h)
print(h.dtype)
print(i)
print(i.dtype)
print(j)
print(j.dtype)
実行結果
2024-01-10T10:11:12
datetime64[s]
2024-01-10T10:11
datetime64[m]
2024-01-10T10
datetime64[h]
2024-01-10
datetime64[D]
2024-01
datetime64[M]
2024
datetime64[Y]
np.datetime64形式から日時の取得方法
np.datetime64形式から日時を取得するには「np.datetime64(値, “ユニット”)」とします。
「ユニット」とは年なら「Y」、月なら「M」、日なら「D」、時なら「h」、分なら「m」、秒なら「s」といった感じです。
ただしそれぞれ指定したユニット”だけ”が取得できるわけではなく、指定したユニット”まで”取得されます。
import numpy as np
k = np.datetime64("2024-01-10 10:11:12")
print(np.datetime64(k, "Y"))
print(np.datetime64(k, "M"))
print(np.datetime64(k, "D"))
print(np.datetime64(k, "h"))
print(np.datetime64(k, "m"))
print(np.datetime64(k, "s"))
実行結果
2024
2024-01
2024-01-10
2024-01-10T10
2024-01-10T10:11
2024-01-10T10:11:12
np.arangeを使って連続した日時をもつndarrayの作成方法
NumPyのndarrayでは「dtype=np.datetime64」というオプションを追加することで、np.datetime64形式での要素を格納することができます。
import numpy as np
l = np.array(["2024-01-10", "2024-02-11", "2024-10-12"], dtype=np.datetime64)
print(l)
print(l.dtype)
実行結果
['2024-01-10' '2024-02-11' '2024-10-12']
datetime64[D]
またnp.arangeでもnp.datetime64形式で開始値と終了値を指定し、「dtype=np.datetime64」というオプションを追加すると連続した日時をもつリストを作成してくれます。
import numpy as np
m = np.arange("2024-01-10", "2024-01-16", dtype=np.datetime64)
print(m)
実行結果
['2024-01-10' '2024-01-11' '2024-01-12' '2024-01-13' '2024-01-14'
'2024-01-15']
月の変わり目や閏年なども考慮して要素を作成してくれます。
import numpy as np
n = np.arange("2024-02-25", "2024-03-05", dtype=np.datetime64)
print(n)
実行結果
['2024-02-25' '2024-02-26' '2024-02-27' '2024-02-28' '2024-02-29'
'2024-03-01' '2024-03-02' '2024-03-03' '2024-03-04']
import numpy as np
o = np.arange("2023-02-25", "2023-03-05", dtype=np.datetime64)
print(o)
実行結果
['2023-02-25' '2023-02-26' '2023-02-27' '2023-02-28' '2023-03-01'
'2023-03-02' '2023-03-03' '2023-03-04']
上記は年月日の例ですが、開始値、終了値に秒まで含んだ値の場合、秒が連続した要素が作成されます。
import numpy as np
p = np.arange("2024-01-10T10:11:12", "2024-01-10T10:11:17", dtype=np.datetime64)
print(p)
実行結果
['2024-01-10T10:11:12' '2024-01-10T10:11:13' '2024-01-10T10:11:14'
'2024-01-10T10:11:15' '2024-01-10T10:11:16']
気をつけることはあくまでも最後のユニットが連続した要素を作成するため、分が連続した要素を作りたいのに、開始値、終了値に秒まで書いてしまうと、秒が連続した要素として作成されてしまいます。
import numpy as np
q = np.arange("2024-01-10T10:11:12", "2024-01-10T10:16:12", dtype=np.datetime64)
print(q)
実行結果
['2024-01-10T10:11:12' '2024-01-10T10:11:13' '2024-01-10T10:11:14'
'2024-01-10T10:11:15' '2024-01-10T10:11:16' '2024-01-10T10:11:17'
'2024-01-10T10:11:18' '2024-01-10T10:11:19' '2024-01-10T10:11:20'
'2024-01-10T10:11:21' '2024-01-10T10:11:22' '2024-01-10T10:11:23'
'2024-01-10T10:11:24' '2024-01-10T10:11:25' '2024-01-10T10:11:26'
(中略)
'2024-01-10T10:15:57' '2024-01-10T10:15:58' '2024-01-10T10:15:59'
'2024-01-10T10:16:00' '2024-01-10T10:16:01' '2024-01-10T10:16:02'
'2024-01-10T10:16:03' '2024-01-10T10:16:04' '2024-01-10T10:16:05'
'2024-01-10T10:16:06' '2024-01-10T10:16:07' '2024-01-10T10:16:08'
'2024-01-10T10:16:09' '2024-01-10T10:16:10' '2024-01-10T10:16:11']
datetimeモジュールと比べると全体的にやや使いにくい感じがしましたが、連続した日時を作成するには手軽な方法だと思います。
次回はNumPyでリスト内の要素の差分を取得するdiff関数を紹介します。
ではでは今回はこんな感じで。
コメント