如何将平均 Timedelta 添加到 datetime.time?
How do I add an average Timedelta to a datetime.time?
我正在尝试估算数据集中缺少的一些 df['Roll_time'] 值。我有 avg_time_diff 变量,它是一个 timedelta64[ns] dtype 和 df['Notif_date'],它是一个 datetime.time。
我想为缺少 'Roll_time'.
的每一行计算 avg_time_diff 和 'Notif_date' 的总和
到目前为止我有这个:
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'
您还需要将 datetime.time
对象转换为 timedelta
以便算术有效。
例如:
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]
如果您希望输出为 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
我正在尝试估算数据集中缺少的一些 df['Roll_time'] 值。我有 avg_time_diff 变量,它是一个 timedelta64[ns] dtype 和 df['Notif_date'],它是一个 datetime.time。 我想为缺少 'Roll_time'.
的每一行计算 avg_time_diff 和 'Notif_date' 的总和到目前为止我有这个:
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'
您还需要将 datetime.time
对象转换为 timedelta
以便算术有效。
例如:
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]
如果您希望输出为 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