[Python]pandasの日付データから年、月、日、曜日への変換方法

[Python]pandasの日付データから年、月、日、曜日への変換方法
pandasに文字型として入力されている日付データから年、月、日や曜日への変換の仕方です。平日と休日では当然購買行動にも変化が表れるので、マーケティング分析ではよくこの処理を行います。

日付が入っているdateと数値が入っているscoreのダミーデータを作成します。スコアは特に意味はないです。データフレームの雰囲気のために付けてます。

In [1]:
import pandas as pd
import numpy as np

df = pd.DataFrame({'date':['2016-04-01','2017-04-01','2018-04-01'],
                   'score':np.random.normal(size=3)})
df
Out[1]:
date score
0 2016-04-01 -0.456590
1 2017-04-01 2.001334
2 2018-04-01 0.815282

datetime64[ns]に変換

まず文字列で入力されている日付をdatetime64[ns]型に変換します。datetime64[ns]に変換するには、pd.to_datetime()を用います。その際、formatでどのような形で日付が文字列として表現されているかを教えます。%Yや%mなどは以下を表しています。

書式 内容
%Y 4桁の年
%m 2桁の月
%d 2桁の日
In [2]:
#日付型に変換
df['date'] = pd.to_datetime(df['date'],format='%Y-%m-%d')

ちゃんとdatetime64[ns]型になっているか確認してみます。

In [3]:
df.dtypes
Out[3]:
date     datetime64[ns]
score           float64
dtype: object

大丈夫そうですね。

データ変換

datetime64[ns]型に変換できたので、日付に関する様々なデータに変換してみます。

datetime64[ns]から年を抜き出すにはdt.yearメソッドを指定します。

In [4]:
df['date'].dt.year
Out[4]:
0    2016
1    2017
2    2018
Name: date, dtype: int64

datetime64[ns]から月を抜き出すにはdt.monthメソッドを指定します。

In [5]:
df['date'].dt.month
Out[5]:
0    4
1    4
2    4
Name: date, dtype: int64

datetime64[ns]から日付を抜き出すにはdt.dayメソッドを指定します。

In [6]:
df['date'].dt.day
Out[6]:
0    1
1    1
2    1
Name: date, dtype: int64

曜日

datetime64[ns]から曜日に変換するにはdt.dayofweekメソッドを使います。

In [7]:
df['date'].dt.dayofweek
Out[7]:
0    4
1    5
2    6
Name: date, dtype: int64

dayofweekの返り値は日曜日の0から土曜日の6までを表します。なので、2018-04-01は土曜日だということがわかります。dt.strftime()を使うと、もう少しわかりやすく表現することも可能です。

In [8]:
df['date'].dt.strftime('%A')
Out[8]:
0      Friday
1    Saturday
2      Sunday
Name: date, dtype: object
In [9]:
df['date'].dt.strftime('%a')
Out[9]:
0    Fri
1    Sat
2    Sun
Name: date, dtype: object

%Aだと曜日の文字列表記、%aだと省略表記を出力します。

まとめ

特に日付の曜日変換は頻繁に発生する作業なので、是非とも覚えておきたい処理です。他にも時間帯などの変換も可能です。もし興味のある方は、以下の参考書籍をご参考下さい。ではでは、今日はこの辺で。

Pythonカテゴリの最新記事