2016-08-04 11 views
2

現在、私の日付は文字列として書式設定されています。パンダ日時書式設定

df['submitted_on'] = df['submitted_on'].apply(lambda x: dt.datetime.strptime(x, '%Y-%m-%d %H:%M:%S.%f')) 

を私はタイムスタンプを削除したいと思いますが、私はとても困難な時期そうすることが生じています:私は、文字列は、次を使用して、日付時刻に変換取得することができました。私の好みのフォーマットは%Y%m%dです。だから私はTHISページを見つけて.date()を追加しました。以下にその結果:

df['submitted_on'] = df['submitted_on'].apply(lambda x: dt.datetime.strptime(x, '%Y%m%d').date()) 

を私は、この値のエラーを取得していますし、私は再びタイムスタンプを削除するにはどうするかで失われています。どんな助けでも大歓迎です。

ValueError: time data '2015-02-26 16:45:36.0' does not match format '%Y%m%d'

+0

DataFrameの例を投稿してください。 – Alex

答えて

1
s = pd.Series(['2010-01-01 10:00', '2010-06-01 11:00']) 

pd.to_datetime(pd.to_datetime(s).dt.date) 
2

あなたはnormalizedocs)を使用することができます。

dti = pd.DatetimeIndex(start='today', periods=4, freq='D') 
dti 

出力

DatetimeIndex(['2016-08-04 14:30:34.447589', '2016-08-05 14:30:34.447589', 
       '2016-08-06 14:30:34.447589', '2016-08-07 14:30:34.447589'], 
       dtype='datetime64[ns]', freq='D') 

そして

dti.normalize() 

出力

DatetimeIndex(['2016-08-04', '2016-08-05', '2016-08-06', '2016-08-07'], dtype='datetime64[ns]', freq='D') 

それがタイムスタンプのシリーズだ場合は、マップでそれらを変換することができます。

編集:この場合、@ piRSquaredの方が優れています。

pd.to_datetime(dti).map(lambda dt: dt.date()) 

出力

array([datetime.date(2016, 8, 4), datetime.date(2016, 8, 5), 
     datetime.date(2016, 8, 6), datetime.date(2016, 8, 7)], dtype=object) 
+0

アレックスに感謝します。私のデータフレーム全体にdti.normalize()を適用するのは現実的ですか?またはdatetimeカラムを正規化するだけですか? – anshanno

2

あなたはdatetime.datetimeオブジェクトにTimestampオブジェクトを変換して示すようにdatetime.date一部を抽出できます。

In [7]: import pandas as pd 

In [8]: print(pd.Timestamp('2015-02-26 16:45:36.0').to_datetime().date()) 
2015-02-26 
<class 'datetime.date'> 

ご希望の形式:

In [11]: print(pd.Timestamp('2015-02-26 16:45:36.0').to_datetime().date().strftime("%Y%m%d")) 
20150226 
<class 'str'>