[英]Pandas - Dropping DataFrame rows based on Datetime column value
我目前正在编写一个脚本,希望在几年中根据Datetime值删除熊猫数据框的某些行(我希望删除datetime在2月至5月之间的行。因此,我首先尝试了以下代码:
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”]不包含在轴线
有谁能解决这个问题?
我认为您可以使用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'))]
实际上,我已经使用以下代码找到了想要的东西:
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)]
这很丑陋,我确实认为可以用一种更有效的方法来完成它,但是当排除日期时间值位于某个时间范围内的行时,它可以工作。
我发现查询比删除更有用。 但是,您当然需要更改参数以包括要保留的部分数据。
df.query("Date.dt.month < 2 & Date.dt.month > 5", inplace=True)
如果您想使用确切的日期:
df.query("Date <= '2017-01-31' & Date >= '2017-05-01' ", inplace=True)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.