[英]Python: Pandas Dataframe How to Convert timedelta column to float column
[英]Python Pandas Dataframe Remove Rows by Timedelta Column Value
我试图从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)]
我想避免迭代所有的行,但如果这就是我必须做的事情,那么我会这样做。
非常感谢您的帮助!
编辑:我真正的问题是我的'Elapsed time'列的dtype是object而不是timedelta。 快速解决方法是使用下面的代码来转换dtype,但更好的解决方法是确保首先不将dtype设置为对象类型。 谢谢大家的帮助和评论。
df_new = df[pd.to_timedelta(df['Elapsed time']) > pd.to_timedelta('3 seconds')]
使用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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.