我正在尝试从数据帧中删除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。所以我想要一个看起来像这样的数据框(从上面):
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
3 2018-10-29 08:11:27 0 days 00:00:08
4 2018-10-29 08:11:27 0 days 00:00:08
我尝试了许多不同的操作,产生了许多不同的错误消息-通常是不兼容的类型比较错误。例如:
df_new = df[df['Elapsed time'] > pd.to_timedelta('3 seconds')]
df_new = df[df['Elapsed time'] > datetime.timedelta(seconds=3)]
我想避免对所有行进行迭代,但是如果那是我必须要做的,那么我会做。
非常感谢您的帮助!
编辑:我的真正问题是我的“经过时间”列的dtype是对象而不是timedelta。一个快速的解决方法是使用下面的代码强制转换dtype,但更好的解决方法是确保首先不要将dtype设置为对象类型。谢谢大家的帮助和评论。
df_new = df[pd.to_timedelta(df['Elapsed time']) > pd.to_timedelta('3 seconds')]
答案 0 :(得分:3)
使用pd.read_clipboard(sep ='\ s \ s +)获取数据
df = pd.read_clipboard(sep='\s\s+')
df['Elapsed time'] = pd.to_timedelta(df['Elapsed time'])
您可以使用:
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