我正在编写一个脚本,我希望在几年内根据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;]未包含在轴
中有人能解决这个问题吗?
答案 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)