pandas

【Pandas】DataFrameやSeriesで1か月後の日付を計算する

MAX

Pandasでの日付計算はPythonの日付計算と同じようにできる部分もあるが、Seriesとして扱う必要があるので、処理によっては少し面倒だったりする。

日付計算は基本的に日数で行われる。

また気軽にmonthに+1したりができないので、1か月後などの計算がしにくかったりするのでメモ。

スポンサーリンク

1か月後の日付を計算する

Series.dtのdays_in_month(daysinmonth)を使うことで1か月の日付を取得できるので、加算すれば1か月後の日付になる。

1import pandas as pd
2
3date1 = ["2020-1-1", "2020-2-2", "2020-3-3", "2020-4-4", "2020-5-5", "2020-6-6"]
4
5df_date = pd.DataFrame(data={"date": date1})
6# dateを日付型に変換
7df_date["date"] = pd.to_datetime(df_date["date"], format="%Y-%m-%d", errors="coerce")
8
9# days_in_monthで1か月の日数を取得し、加算する
10df_date["date2"] = df_date["date"] + pd.to_timedelta(df_date["date"].dt.days_in_month, "D")
11print(df_date)
12#         date      date2
13# 0 2020-01-01 2020-02-01
14# 1 2020-02-02 2020-03-02
15# 2 2020-03-03 2020-04-03
16# 3 2020-04-04 2020-05-04
17# 4 2020-05-05 2020-06-05
18# 5 2020-06-06 2020-07-06

1か月後の日付列が作成される。

なお、日数を減算することで前月が計算できそうに思えるが、当月が31日で前月が30日の場合や、前月が2月の場合(当月が3月)の場合などは上手く計算できないため、1か月前の日付計算には使用しない方が良い。

また、月末の日付から翌月を計算しようとする場合も、上手くいかないことが多いので注意。

あわせて読みたい
【Pandas】DataFrameやSeriesで数か月後の日付を計算する
【Pandas】DataFrameやSeriesで数か月後の日付を計算する

上記記事の日付計算の不可逆性についてを参照。

to_timedeltaの単位について

to_timedeltaは単位に月や年を指定できないため、日数で計算する必要がある。

1# dt.monthで月を取得して、単位にMを指定しようとするとエラーとなる。
2df_date["date3"] = df_date["date"] + pd.to_timedelta(df_date["date"].dt.month, "M")
3
4# ValueError: Units 'M', 'Y', and 'y' are no longer supported, as they do not represent unambiguous timedelta values durations.

単位に週を指定することは可能だが、×7されて日数として計算される。

1# 4週を指定すると28日となる。
2df_date["date3"] = df_date["date"] + pd.to_timedelta(4, "W")
3print(df_date)
4#         date      date2      date3
5# 0 2020-01-01 2020-02-01 2020-01-29
6# 1 2020-02-02 2020-03-02 2020-03-01
7# 2 2020-03-03 2020-04-03 2020-03-31
8# 3 2020-04-04 2020-05-04 2020-05-02
9# 4 2020-05-05 2020-06-05 2020-06-02
10# 5 2020-06-06 2020-07-06 2020-07-04

数か月後の日付を計算する方法

あわせて読みたい
【Pandas】DataFrameやSeriesで数か月後の日付を計算する
【Pandas】DataFrameやSeriesで数か月後の日付を計算する
スポンサーリンク
ABOUT ME
MAX
MAX
ITエンジニア、データサイエンティスト
新卒でSIerに入社し、フリーランスになってWEB系へ転向。
その後AIの世界へ足を踏み入れ、正社員に戻る。 テーブルデータの分析がメイン。
スポンサーリンク
記事URLをコピーしました