pandas

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

MAX

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

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

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

スポンサーリンク

型をdatetime64に変換する

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

1df = pd.DataFrame(data=[["2020-1-1", "2021-1-1"],
2                        ["2020-1-2", "2021-2-1"],
3                        ["2020-1-3", "2021-3-1"]],
4                  columns=["colA", "colB"])
5df["colA"] = pd.to_datetime(df["colA"], format="%Y-%m-%d")
6print(df.dtypes)
7
8# colA    datetime64[ns]
9# colB            object
10# dtype: object

to_datetimeで型を変換する。

曜日を取得する

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1df["colA"].dt.weekday
2
3# 0    0
4# 1    1
5# 2    2
6# 3    3
7# 4    4
8# 5    5
9# 6    6
10# Name: colA, dtype: int64

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

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

1df["colA"].dt.dayofweek
2
3# 0    0
4# 1    1
5# 2    2
6# 3    3
7# 4    4
8# 5    5
9# 6    6
10# Name: colA, dtype: int64

年を取得する方法

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

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

1df["colA"].dt.year
2
3# 0    2020
4# 1    2020
5# 2    2020
6# 3    2020
7# 4    2020
8# 5    2020
9# 6    2020
10# Name: colA, dtype: int64

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

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

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

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

下2桁を取得したい場合

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

月を取得する方法

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

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

1df["colA"].dt.month
2
3# 0    1
4# 1    1
5# 2    1
6# 3    1
7# 4    1
8# 5    1
9# 6    1
10# Name: colA, dtype: int64

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

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

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

日付を取得する方法

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

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

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

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

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

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

まとめ

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

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

スポンサーリンク
ABOUT ME
MAX
MAX
ITエンジニア、データサイエンティスト
新卒でSIerに入社し、フリーランスになってWEB系へ転向。
その後AIの世界へ足を踏み入れ、正社員に戻る。 テーブルデータの分析がメイン。
スポンサーリンク
記事URLをコピーしました