2016-04-25 102 views
0

我目前正在編寫一個腳本,我想根據Datetime值在幾年內刪除一些我的熊貓數據框的行(我想刪除行日期時間在二月到五月之間所以,我第一次嘗試下面的代碼:熊貓 - 基於Datetime列值刪除DataFrame行

game_df['Date'] = game_df[(game_df['Date'].dt.month < 2) & (game_df['Date'].dt.month > 5)] 

它給了我NaN值相同的數據框「日期」列在此期間的時間,所以我試圖以刪除相應的下面的代碼行:

game_df['Date'] = game_df[(game_df['Date'].dt.month < 2) & (game_df['Date'].dt.month > 5)].drop(game_df.columns) 

但它引發了一個錯誤:標籤[U '日期 'U' other_column1 'U' other_column2 'U' other_column3 'U' other_column4']不包含在軸線

有誰可以解決這個問題?

回答

2

我想你可以使用Timestamp秒的列表,請嘗試是這樣的:

如果要說明具體日期排除行:

game_df[~game_df['Date'].isin([pd.Timestamp('20150210'), pd.Timestamp('20150301')])] 

~not運營之初game_df以防你不熟悉它。所以它表示要返回時間戳不是所提到的兩個日期的數據幀。

編輯: 如果要排除特定日期之間行的範圍

game_df[~game_df['Date'].isin(pd.date_range(start='20150210', end='20150301'))] 
+0

感謝您的幫助。它是否返回沒有日期或沒有日期的數據框(包含)?因爲實際上你必須考慮我給出的時間範圍內的日期,並且我想排除其'日期'值在範圍內(2月,10 - 3月,1日)範圍內的迷惑。 – DiamondDogs95

+0

你想排除特定的日子或一系列日子嗎? – Jarad

+0

是的我想排除一系列日子 – DiamondDogs95

0

其實,我發現我一直在尋找與下面的代碼:

game_df = game_df[(game_df['Date'].dt.month != 2) & (game_df['Date'].dt.month != 3) & (game_df['Date'].dt.month != 4)\ 
         & (game_df['Date'].dt.month != 5)] 

這是非常醜陋的,我真的認爲它可以用更有效的方式來完成,但它適用於排除日期時間值位於一段時間內的行。

+1

看起來你最初的錯誤是因爲你使用了&&。同一月份不能小於2,同時大於5。而不是'&'嘗試'|'運算符(它是按元素或OR)。 – ayhan

0

而不是丟棄,我發現查詢更有幫助。但是你需要改變參數,以包含你想保留的部分數據。

df.query("Date.dt.month < 2 & Date.dt.month > 5", inplace=True) 

,如果你想使用確切日期:

df.query("Date <= '2017-01-31' & Date >= '2017-05-01' ", inplace=True)