2016-11-10 4 views
3

日付を文字列として含む次のpandasデータフレームで作業しています。日付も時間があります。パンダは列の値を分割して列に戻します

(Pdb) temp_df_no_na['logged_dt'].head(n=5) 
0 01/19/2010 00:00:00.000000 
1 03/28/2009 00:00:00.000000 
2 09/22/2005 00:00:00.000000 
3 12/14/2010 00:00:00.000000 
5 02/23/2010 00:00:00.000000 

日付の間のスペースで区切り、日付部分のみを保持したいと考えています。

次のラムダ関数を書いて適用しました。それは動作しましたが、警告を得ることになり、結果が壊れる可能性があることを心配しています。なぜ私はこのような警告を得るでしょう。ここ

temp_df_no_na['logged_dt'] = temp_df_no_na['logged_dt'].apply(lambda x:x.split(" ")[0] if(x.split(" ") > 0) else x) 

は警告

SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame. 
Try using .loc[row_indexer,col_indexer] = value instead 

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy 
    from dataFrameCreator import DataFrameCreator 

(Pdb) temp_df_no_na['logged_dt'].head(n=5) 
0 01/19/2010 
1 03/28/2009 
2 09/22/2005 
3 12/14/2010 
5 02/23/2010 

答えて

2

方法1
がpd.to_datetime

temp_df_no_na.logged_dt = pd.to_datetime(temp_df_no_na.logged_dt) 
temp_df_no_na.logged_dt 

0 2010-01-19 
1 2009-03-28 
2 2005-09-22 
3 2010-12-14 
5 2010-02-23 
Name: logged_dt, dtype: datetime64[ns] 

Timestampを取得しています

方法2
dt.strftime

temp_df_no_na.logged_dt = pd.to_datetime(temp_df_no_na.logged_dt).dt.strftime('%Y-%m-%d') 
temp_df_no_na.logged_dt 

0 2010-01-19 
1 2009-03-28 
2 2005-09-22 
3 2010-12-14 
5 2010-02-23 
Name: logged_dt, dtype: object 

mehtod 3
str.split

temp_df_no_na.logged_dt = temp_df_no_na.logged_dt.str.split().str[0] 
temp_df_no_na.logged_dt 

0 2010-01-19 
1 2009-03-28 
2 2005-09-22 
3 2010-12-14 
5 2010-02-23 
Name: logged_dt, dtype: object 
+0

申し訳ラムダfuncを追加するのを忘れ私が言及したことは、その機能に問題があることを確認してください –

+1

ラムダはうまく見えます。方法3はそれをベクトル化したものです。 SettingWithCopyWarningは、別のデータフレームに結びついている「temp_df_no_na」を示します。それはあなたが何かのコピーであるときにそれに割り当てていることを警告します。それはあなたが尋ねた質問とは関係ありません。 – piRSquared