簡體   English   中英

如何將平均 Timedelta 添加到 datetime.time?

[英]How do I add an average Timedelta to a datetime.time?

我正在嘗試估算我的數據集中缺少的一些 df['Roll_time'] 值。 我有一個 timedelta64[ns] dtype 的 avg_time_diff 變量和一個 datetime.time 的 df['Notif_date']。 我想為缺少“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]

如果您希望 output 的數據類型為 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]

進一步閱讀: 將 timedelta 格式化為字符串

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM