numpy.datetime64の日付データから曜日を取り出す

python

この記事に書いてあること

表題のとおりです。

システムトレードの分析やバックテストでは、日付データから曜日を取り出したいことが多々あります。

しかし、本記事執筆時点では「”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)

コメント

タイトルとURLをコピーしました