今回はPandasのDataFrameやSeriesで日付のデータを扱いたい場合の変換方法等を紹介していきます。
使用するデータ
今回はS&P500データを使用します。
import pandas as pd
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
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)
日付データを文字列に変換
astype()でstrに変換することでdatetime64型を文字列に変換することができます。
astype()の使い方は下記も参考にしてみてください。
df['Date'].astype(str)
任意のフォーマットに変換したい場合はdt.strftime()を使います。
df['Date'].dt.strftime('%Y年%m月%d日')
pd.DataFrame(df['Date'].dt.strftime('%A, %B %d, %Y'))
Pythonでデータサイエンスするなら
Pythonでデータサイエンスをするなら、以下の書籍がおすすめです。Pandas、matplotlib、Numpy、scikit-learnといったデータサイエンスに必要なライブラリを、体系立てて一通り学ぶことができます。
ややお値段高めですが、これ1冊で十分という内容・ボリュームなので、損はしないと思います^^
初学者の方にはこちらもオススメです^^
まとめ
pandasで日付データを扱う方法を紹介しました。今回の内容は日付データを扱ううえでの基本的な操作なので、参考になればと思います。
ではでは👋