繁体   English   中英

熊猫-根据Datetime列值删除DataFrame行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM