最初にオブジェクトとして読み込む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 ad 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)
_
MonthEnd
の_1
_は、1か月先の次の日付に1ステップ進むことを指定するだけです。 (_0
_を使用するか、空白のままにしておくこともできます)。翌月の最終日が必要な場合は、MonthEnd(2)
などを使用します。これはどの月でも機能するはずです。そのため、月の日数などを知る必要はありません。それ。より多くのオフセット情報は documentation にあります。
使用例と出力:
_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
_
ルートが提供することに同意することは正しい方法です。ただし、MonthEnd(1)
を盲目的に使用する読者は、月の最後の日付を入力として使用すると、驚くことになります。
_In [4]: pd.Timestamp('2014-01-01')+MonthEnd(1)
Out[4]: Timestamp('2014-01-31 00:00:00')
In [5]: pd.Timestamp('2014-01-31')+MonthEnd(1)
Out[5]: Timestamp('2014-02-28 00:00:00')
_
代わりにMonthEnd(0)
を使用すると、これが得られます。
_In [7]: pd.Timestamp('2014-01-01')+MonthEnd(0)
Out[7]: Timestamp('2014-01-31 00:00:00')
In [8]: pd.Timestamp('2014-01-31')+MonthEnd(0)
Out[8]: Timestamp('2014-01-31 00:00:00')
_
つかいます - dateutil.relativedelta
。次に、月の最初に相対デルタを追加します。
import dateutil.relativedelta as rd
datetime.date(2001, 4, 1) + rd.relativedelta(day=31)
あなたを取得します:
datetime.date(2001, 4, 30)