2016-05-20 5 views
16

最初にオブジェクトとして読み込んだデータフレーム内に、yyyy-mm-ddの形式で日付を変換する必要がある月の終わり。一例として、月末を探すパンダのデータフレームシリーズ

、私はオブジェクトとして列日付を持つデータフレーム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 

注:私はすでに

答えて

27

from pandas.tseries.offsets import MonthEnd 

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

1ちょうど月末だ次の日に一歩を移動するために指定MonthEndインチ(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 
+0

うわー、これは素晴らしいですが、私は私はこれについて前に知りたかったと思っています.... – user25064

+0

これまでに見た中で最も洗練されたソリューションの一つです。ありがとう! :) – Lisle

+0

問題ありません! 「MonthEnd」は、パンダに隠された宝石の1つで、あなたがすぐにパンダとは思っていなかったものです。通常、私の最初の本能は、他の日時ライブラリを使用することです.Pandasがそのようなクールな機能を持っていることを覚えていない限り! – root

1

使用dateutil.relativedelta DTとしてパンダの広告PD、および日時を輸入してきました。その後、最初の月に相対デルタを追加します。

import dateutil.relativedelta as rd 

datetime.date(2001, 4, 1) + rd.relativedelta(day=31) 

はあなたを取得:あなたはpandas.tseries.offsets.MonthEndを使用することができます

datetime.date(2001, 4, 30) 
7

は、ルート申し出が正しい方法であることに合意しました。彼らは、入力として、月の最後の日付を使用する場合は、やみくもにMonthEnd(1)を使用する読者は驚きのためにある:MonthEnd(0)を使用して

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') 

は、代わりにこれを与える:

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') 
関連する問題