DataFrame Python Pandas удаляет строки по значению столбца Timedelta - PullRequest
0 голосов
/ 05 ноября 2018

Я пытаюсь удалить строки из кадра данных, которые имеют значение 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')]

1 Ответ

0 голосов
/ 05 ноября 2018

Получение данных с использованием 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...