删除timedelta对象中的天数

问题描述 投票:1回答:3

我在pandas dataframe中有一个列,它是在减去两次后创建的。我现在有一个像这个timedelta-1 days +02:45:00对象。我只需要删除-1天,并希望它是02:45:00。有没有办法做到这一点?

python pandas datetime timedelta
3个回答
1
投票

我想你可以减去转换为timedeltas的days

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'>

0
投票

如果您的列名为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
投票

对于可能遇到此问题的其他人,我找到了一个非常简单的解决方案:

if timedelta_obj.days < 0:
    timedelta_obj.days = datetime.timedelta(
        seconds=timedelta_obj.total_seconds() + 3600*24)
© www.soinside.com 2019 - 2024. All rights reserved.