Pandas

【Pandas】日付から曜日や年月日を取得する

pandasで日付を扱う時には、曜日が必要になることが割と多い。

また、曜日以外にも日付を分解する機会も多い。

曜日の取得にはいくつか方法があるので紹介する。

 

型をdatetime64に変換する

Pandasでは列を日付として扱うためにdatetime64型に変換する必要がある。

df = pd.DataFrame(data=[["2020-1-1", "2021-1-1"],
                        ["2020-1-2", "2021-2-1"],
                        ["2020-1-3", "2021-3-1"]],
                  columns=["colA", "colB"])
df["colA"] = pd.to_datetime(df["colA"], format="%Y-%m-%d")
print(df.dtypes)
>>
colA    datetime64[ns]
colB            object
dtype: object

to_datetimeで型を変換する。

曜日を取得する

曜日は「Monday」「Mon」などの文字列として取得する方法と、「0」「1」などの数値として取得する方法がある。

文字列、数値共に複数の方法がある。

曜日を文字列で取得する方法1

「Monday」「Tuesday」として取得する方法。

df["colA"].dt.day_name()
>>
0       Monday
1      Tuesday
2    Wednesday
3     Thursday
4       Friday
5     Saturday
6       Sunday
Name: colA, dtype: object

 

曜日を文字列で取得する方法2

同じく「Monday」「Tuesday」として取得する方法。

df["colA"].dt.strftime("%A")
>>
0       Monday
1      Tuesday
2    Wednesday
3     Thursday
4       Friday
5     Saturday
6       Sunday
Name: colA, dtype: object

 

曜日を文字列で取得する方法3

「Mon」「Tue」などで取得する方法。

文字として見たい場合は、この方法の方が短くなるので見やすいかもしれない。

df["colA"].dt.strftime("%a")
>>
0    Mon
1    Tue
2    Wed
3    Thu
4    Fri
5    Sat
6    Sun
Name: colA, dtype: object

 

曜日を数値で取得する方法1

数値で取得する場合、月曜日が0、日曜日が6となる。

計算に扱いやすいのはこの方法になる。

df["colA"].dt.weekday
>>
0    0
1    1
2    2
3    3
4    4
5    5
6    6
Name: colA, dtype: int64

 

曜日を数値で取得する方法2

同じく数値で取得する方法。

df["colA"].dt.dayofweek
>>
0    0
1    1
2    2
3    3
4    4
5    5
6    6
Name: colA, dtype: int64

 

 

年を取得する方法

日付データから「年」の部分を取得する方法。

年を数値として取得する方法

df["colA"].dt.year
>>
0    2020
1    2020
2    2020
3    2020
4    2020
5    2020
6    2020
Name: colA, dtype: int64

 

年を文字列として取得する方法

strftimeを使うと文字列として年を取得することができる。

(あまり使う機会がないかもしれないが)

df["colA"].dt.strftime("%Y")
>>
0    2020
1    2020
2    2020
3    2020
4    2020
5    2020
6    2020
Name: colA, dtype: object

 

下2桁を取得したい場合

df["colA"].dt.strftime("%y")
0    20
1    20
2    20
3    20
4    20
5    20
6    20
Name: colA, dtype: object

 

月を取得する方法

月も年と同じ方法ようなで取得できる。

月を数値として取得する方法

df["colA"].dt.month
>>
0    1
1    1
2    1
3    1
4    1
5    1
6    1
Name: colA, dtype: int64

 

月を文字列として取得する方法

先頭に「0」が欲しい場合に使用するかもしれない。

df["colA"].dt.strftime("%m")
>>
0    01
1    01
2    01
3    01
4    01
5    01
6    01
Name: colA, dtype: object

 

日付を取得する方法

日付も月と同じ方法で取得できる。

日付を数値として取得する方法

df["colA"].dt.day
>>
0     6
1     7
2     8
3     9
4    10
5    11
6    12
Name: colA, dtype: int64

 

日付を文字列として取得する方法

先頭に「0」が欲しい場合に使用するかもしれない。

df["colA"].dt.strftime("%d")
>>
0    06
1    07
2    08
3    09
4    10
5    11
6    12
Name: colA, dtype: object

 

まとめ

数値文字列
曜日weekday, dayofweekday_name(), strftime(“%A”), strftime(“%a”)
yearstrftime(“%Y”), strftime(“%y”)
monthstrftime(“%m”)
daystrftime(“%d”)

 

df[“colA”].dtに対して上記の表の通りに曜日や年月日を取得できる。