2016-04-25 110 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)