如何将平均时间增量添加到datetime.time?

2024-06-25 22:41:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图估算数据集中缺少的df['Roll_time']值。我有一个avg_time_diff变量,它是timedelta64[ns]数据类型,还有一个df['Notif_date'],它是datetime.time。 我想为缺少“滚动时间”的每一行计算平均时间差和“非滚动日期”之和

到目前为止,我有:

avg_time_diff = df['Time_diff'].mean()
df['Time_diff'].fillna(avg_time_diff, inplace=True)

df['Roll_time'].fillna(avg_time_diff + df['Notif_time'])

我在运行代码时遇到此错误:

TypeError: unsupported operand type(s) for +: 'Timedelta' and 'datetime.time'

Tags: 数据dfdatetimedatetime时间diffavg
1条回答
网友
1楼 · 发布于 2024-06-25 22:41:17

您还需要将datetime.time对象转换为timedelta,这样算法才能工作

Ex:

import datetime
import pandas as pd

# some dummy data:
df = pd.DataFrame({'Time_diff': [pd.Timedelta(hours=1), pd.Timedelta(hours=2), pd.NaT, pd.Timedelta(hours=4)],
                   'Notif_time': [datetime.time(1,2,3), datetime.time(2,3,4), datetime.time(4,5,6), datetime.time(7,8,9)]})

# Time_diff column and avg_time_diff are of dtype Timedelta...
avg_time_diff = df['Time_diff'].mean() 
df['Time_diff'] = df['Time_diff'].fillna(avg_time_diff)

# need to cast Notif_time to Timedelta as well so that the arithmetic works out:
df['Roll_time'] = avg_time_diff + pd.to_timedelta(df['Notif_time'].astype(str))

# df['Roll_time']
# 0   0 days 03:22:03
# 1   0 days 04:23:04
# 2   0 days 06:25:06
# 3   0 days 09:28:09
# Name: Roll_time, dtype: timedelta64[ns]

如果希望输出为dtype datetime(带有所有格式选项等),可以通过添加日期来实现:

# to get from timedelta to datetime, you can add the timedelta column to today's date:
df['roll_datetime'] = pd.Timestamp('now').floor('d') + df['Roll_time']

# df['roll_datetime']
# 0   2021-02-04 03:22:03
# 1   2021-02-04 04:23:04
# 2   2021-02-04 06:25:06
# 3   2021-02-04 09:28:09
# Name: roll_datetime, dtype: datetime64[ns]

进一步阅读:Format timedelta to string

相关问题 更多 >