この記事に書いてあること
表題のとおりです。
システムトレードの分析やバックテストでは、日付データから曜日を取り出したいことが多々あります。
しかし、本記事執筆時点では「”numpy.datetime64″ 曜日」とgoogle検索しても190件弱しかヒットしません。
他にもっと良い方法がある気はしますが、検索に疲れたのでこのコードで行くことにします。
コード
# +---------+
# | 元データ |
# +---------+
# ↓が曜日を取り出したい日付データです。
# dates = ['2004-11-17T00:00:00.000000000'
# '2004-11-18T00:00:00.000000000'
# '2004-11-19T00:00:00.000000000']
# 'numpy.ndarray' ですが、'list' でも問題ありません。
# 各要素のデータ型は 'numpy.datetime64' です。
# 2004-11-17T00:00:00.000000000
# <class 'numpy.datetime64'>
# +------------------+
# | 取り出し方 その1 |
# +------------------+
# 日付を一つずつ変換して取り出す方法です。
import pandas as pd
for date in dates:
weekday = pd.to_datetime(date).weekday()
print(weekday) # -> 2, 3, 4
# +------------------+
# | 取り出し方 その2 |
# +------------------+
# すべての日付を変換してから取り出す方法です。
import pandas as pd
dates = pd.to_datetime(dates)
# ↑のデータ型は
# DatetimeIndex(['2004-11-17', '2004-11-18', '2004-11-19'],
# dtype='datetime64[ns]', freq=None)
# <class 'pandas.core.indexes.datetimes.DatetimeIndex'>
# また各要素のデータ型は
# 2004-11-17 00:00:00
# <class 'pandas._libs.tslibs.timestamps.Timestamp'>
for date in dates:
weekday = date.weekday()
print(weekday) # -> 2, 3, 4
# +-------+
# | おまけ |
# +-------+
# dates = ['2004-11-17T00:00:00.000000000'
# '2004-11-18T00:00:00.000000000'
# '2004-11-19T00:00:00.000000000']
# ↑の 'numpy.ndarray' を 'list' に変換すると
# ↓のように各要素が 'int' になります。
# [1100649600000000000,
# 1100736000000000000,
# 1100822400000000000]
# <class 'list'>
# 1100649600000000000
# <class 'int'>
# このような場合でも、同じコードで曜日を取り出せます。
for date in dates:
weekday = pd.to_datetime(date).weekday()
print(weekday)
コメント