Удалить дни в объекте timedelta - PullRequest
0 голосов
/ 03 ноября 2018

У меня в панде есть столбец dataframe, который создается после двух вычитаний. Теперь у меня есть timedelta объект, подобный этому -1 days +02:45:00. Мне просто нужно удалить -1 дней и хочу, чтобы это было 02:45:00. Есть ли способ сделать это?

Ответы [ 3 ]

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

Если ваш столбец называется time1, вы можете сделать это следующим образом:

import pandas as pd
import datetime as dt
df['time1'] = pd.to_datetime(str(df.time1)[11:19]) #this slice can be adjusted
df['time1'] = df.time1.dt.time

это преобразует timedelta в str, выделяет часть времени из нее, конвертирует ее в datetime и извлекает из нее время.

0 голосов
/ 13 февраля 2019

Я нашел очень простое решение для других людей, которые могут столкнуться с этой проблемой:

if timedelta_obj.days < 0:
    timedelta_obj.days = datetime.timedelta(
        seconds=timedelta_obj.total_seconds() + 3600*24)
0 голосов
/ 03 ноября 2018

Я думаю, вы можете вычесть days, преобразованные в timedeltas:

td = pd.to_timedelta(['-1 days +02:45:00','1 days +02:45:00','0 days +02:45:00'])
df = pd.DataFrame({'td': td})

df['td'] = df['td'] - pd.to_timedelta(df['td'].dt.days, unit='d')

print (df.head())

        td
0 02:45:00
1 02:45:00
2 02:45:00

print (type(df.loc[0, 'td']))
<class 'pandas._libs.tslibs.timedeltas.Timedelta'>

Или преобразовать timedeltas в строки и извлечь строки между days и .:

df['td'] = df['td'].astype(str).str.extract('days (.*?)\.')
print (df.head())
          td
0  +02:45:00
1   02:45:00
2   02:45:00

print (type(df.loc[0, 'td']))
<class 'str'>
...