gpt4 book ai didi

Python Pandas Dataframe 按 Timedelta 列值删除行

转载 作者:太空宇宙 更新时间:2023-11-04 00:08:56 25 4
gpt4 key购买 nike

我正在尝试从数据框中删除 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')]

最佳答案

使用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

关于Python Pandas Dataframe 按 Timedelta 列值删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53161160/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com