1. ホーム
  2. python

Pandas DataFrame Seriesの月末を検索する

2023-09-22 09:58:09

質問

最初にオブジェクトとして読み込んだDataFrame内の系列を、yyyy-mm-dd(ddは月の終わり)の形式で日付に変換する必要があります。

例として、オブジェクトとしてDate列を持つDataFrame dfを持っています。

...      Date    ...
...     200104   ...
...     200508   ...

これがすべて終わったときに欲しいのは、日付オブジェクトです。

...      Date    ...
...  2001-04-30  ...
...  2005-08-31  ...

df['Date'].item() が返すような。

datetime.date(2001, 04, 30)

以下のコードでほぼできましたが、日付がすべて月末でなく月初になってしまいます。アドバイスをお願いします。

df['Date'] = pd.to_datetime(df['Date'], format="%Y%m").dt.date

注:すでにPandasの広告pdと、datetimeをdtとしてインポートしています。

どのように解決するのですか?

あなたは pandas.tseries.offsets.MonthEnd :

from pandas.tseries.offsets import MonthEnd

df['Date'] = pd.to_datetime(df['Date'], format="%Y%m") + MonthEnd(1)

1MonthEnd は、月末である次の日付に一歩進むことを指定するだけです。(使用方法 0 を使うか、空白にしておくとうまくいくでしょう)。もし、次の月の最終日を指定したい場合は MonthEnd(2) などとします。 これはどの月でも使えるので、その月の日数などを知る必要はありません。 より詳細なオフセット情報は のドキュメントを参照してください。 .

使用例と出力。

df = pd.DataFrame({'Date': [200104, 200508, 201002, 201602, 199912, 200611]})
df['EndOfMonth'] = pd.to_datetime(df['Date'], format="%Y%m") + MonthEnd(1)

     Date EndOfMonth
0  200104 2001-04-30
1  200508 2005-08-31
2  201002 2010-02-28
3  201602 2016-02-29
4  199912 1999-12-31
5  200611 2006-11-30