Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python数据帧按Timedelta列值删除行_Python_Pandas - Fatal编程技术网

Python数据帧按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

我试图从一个数据帧中删除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   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