【Pandas】日付(datetime)型のデータを操作する

今回はPandasのDataFrameやSeriesで日付のデータを扱いたい場合の変換方法等を紹介していきます。

使用するデータ

今回はS&P500データを使用します。

import pandas as pd

df = pd.read_csv("sp500_index.csv")
df = pd.read_csv("sp500_index.csv")
df.dtypes

>>
Date       object
S&P500    float64
dtype: object

日付型への変換

日付列をdatetime64型に変換

文字列項目をdatetime64型に変換するには、to_datetime()を使います。

df["Date"] = pd.to_datetime(df["Date"])
df.dtypes

>>
Date      datetime64[ns]
S&P500           float64
dtype: object

日付列を新規に作成したい場合には、新規列名を指定したうえで上記処理を実行します。

df["Date2"] = pd.to_datetime(df["Date"])
df.dtypes

>>
Date              object
S&P500           float64
Date2     datetime64[ns]
dtype: object
df["Date2"] = pd.to_datetime(df["Date"])

DataFrame読込時に変換

ExcelやCSVを読み込む際ににdatetime64型に変換することも可能です。引数でparse_datesを指定します。変換したい列の番号を指定します。

例ではread_csv()ですが、read_excel()でも共通です。

df = pd.read_csv("sp500_index.csv", parse_dates=[0])
df.dtypes

>>
Date      datetime64[ns]
S&P500           float64
dtype: object

変換したい列”Date”は先頭列なので、0を指定します。複数列を指定することも可能です。

年月日等属性の抽出

datetime64型では年月日や時分秒を取得することができます。

dtのあとにyearやmonthといった属性を指定します。

#年を取得
df["Date"].dt.year

#月を取得
df["Date"].dt.month

#日を取得
df["Date"].dt.day


#時間を取得
df["Date"].dt.hour

#分を取得
df["Date"].dt.minute

#秒を取得
df["Date"].dt.second

曜日の取得

上記の手順でdayofweekを指定すると、曜日を取得することができます。月曜が0で日曜が6です。

df["dayOfWeek"] = pd.DataFrame(df["Date"].dt.dayofweek)
df["dayOfWeek"]=pd.DataFrame(df["Date"].dt.dayofweek)

日付データを文字列に変換

astype()でstrに変換することでdatetime64型を文字列に変換することができます。

astype()の使い方は下記も参考にしてみてください。

df['Date'].astype(str)

任意のフォーマットに変換したい場合はdt.strftime()を使います。

df['Date'].dt.strftime('%Y年%m月%d日')
df['Date'].dt.strftime('%Y年%m月%d日')
pd.DataFrame(df['Date'].dt.strftime('%A, %B %d, %Y'))
pd.DataFrame(df['Date'].dt.strftime('%A, %B %d, %Y'))

Pythonでデータサイエンスするなら

Pythonでデータサイエンスをするなら、以下の書籍がおすすめです。Pandas、matplotlib、Numpy、scikit-learnといったデータサイエンスに必要なライブラリを、体系立てて一通り学ぶことができます。

ややお値段高めですが、これ1冊で十分という内容・ボリュームなので、損はしないと思います^^

初学者の方にはこちらもオススメです^^

まとめ

pandasで日付データを扱う方法を紹介しました。今回の内容は日付データを扱ううえでの基本的な操作なので、参考になればと思います。

ではでは👋