Pandas - 根据Datetime列值删除DataFrame行

时间:2016-04-25 13:01:21

标签: python datetime pandas

我正在编写一个脚本,我希望在几年内根据Datetime值删除我的pandas数据帧的一些行(我想删除datetime在2月到5月之间的行。所以,我首先尝试了以下代码:

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

它给了我相同的数据框,其中包含了日期&#39;中的NaN值。在这段时间内的专栏。所以我尝试了以下代码以删除相应的行:

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

但它引发了一个错误:标签[u&#39; 日期&#39; U&#39;的 other_column1 &#39; U&#39;的 other_column2 &#39; U&#39;的 other_column3 &#39; u&#39; other_column4 &#39;]未包含在轴

有人能解决这个问题吗?

3 个答案:

答案 0 :(得分:3)

我认为您可以使用Timestamp s列表来尝试这样的事情:

如果要排除具有特定日期的行:

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

答案 1 :(得分: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)]

这非常难看,我真的认为它可以用更有效的方式完成,但它可以在排除日期时间值位于时间跨度内的行时起作用。

答案 2 :(得分: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)