Python数据帧按Timedelta列值删除行
我试图从一个数据帧中删除timedelta值小于若干秒数的行 我的数据框如下所示:Python数据帧按Timedelta列值删除行,python,pandas,Python,Pandas,我试图从一个数据帧中删除timedelta值小于若干秒数的行 我的数据框如下所示: Start Elapsed time 0 2018-10-29 07:56:20 0 days 00:15:05 1 2018-10-29 07:56:20 0 days 00:15:05 2 2018-10-29 08:11:25 0 days 00:00:02 3 2018-10-29 08:11:27 0 days 00:00:08 4
Start Elapsed time
0 2018-10-29 07:56:20 0 days 00:15:05
1 2018-10-29 07:56:20 0 days 00:15:05
2 2018-10-29 08:11:25 0 days 00:00:02
3 2018-10-29 08:11:27 0 days 00:00:08
4 2018-10-29 08:11:27 0 days 00:00:08
5 2018-10-29 08:11:35 0 days 00:00:02
6 2018-10-29 08:11:37 0 days 00:00:00
我想删除所有经过的时间少于几秒的行——现在假设是3。因此,我想要一个看起来像这样的数据帧(从上面):
我尝试了许多不同的方法,产生了许多不同的错误消息——通常是不兼容的类型比较错误。例如:
df_new = df[df['Elapsed time'] > pd.to_timedelta('3 seconds')]
df_new = df[df['Elapsed time'] > datetime.timedelta(seconds=3)]
我希望避免对所有行进行迭代,但如果这是我必须做的,那么我会这样做
非常感谢你的帮助
编辑:我真正的问题是“已用时间”列的数据类型是object而不是timedelta。一个快速修复方法是使用下面的代码强制转换数据类型,但更好的修复方法是确保数据类型首先没有设置为对象类型。谢谢大家的帮助和评论
df_new = df[pd.to_timedelta(df['Elapsed time']) > pd.to_timedelta('3 seconds')]
使用pd.read_剪贴板获取数据(sep='\s\s+) 您可以使用:
df[df['Elapsed time'].dt.total_seconds() > 3]
输出:
Start Elapsed time
0 2018-10-29 07:56:20 00:15:05
1 2018-10-29 07:56:20 00:15:05
3 2018-10-29 08:11:27 00:00:08
4 2018-10-29 08:11:27 00:00:08
df.dtypes
有什么功能?Start datetime 64[ns]经过的时间对象
@jpp当我计算经过的时间时,我只是执行datetime\u end-datetime\u Start
。我从第一个解决方案中得到的错误是,无法将类型“Timedelta”与类型“str”进行比较。
。这是如此令人沮丧,但感谢你指出这一点!是的,但从OP的评论来看,问题出在上游。OP所做的某些操作已将数据类型从timedelta
转换为object
。他们应该尝试修复他们工作流程中的这一部分,而不是以后修补它。Scott Boston自从我加入SO以来,我一直在寻找read\u clipboard
方法。谢谢jpp是正确的-我的数据类型不是我所认为的timedelta,而是一个对象。我需要解决这个问题,然后这可能会起作用。@angmcg,是的,因此,在确保序列未转换为对象后,您的第一个解决方案>pd.to_timedelta('3秒')
没有问题。
df[df['Elapsed time'].dt.total_seconds() > 3]
Start Elapsed time
0 2018-10-29 07:56:20 00:15:05
1 2018-10-29 07:56:20 00:15:05
3 2018-10-29 08:11:27 00:00:08
4 2018-10-29 08:11:27 00:00:08