如何在python中将天数转换为小时
我有一个Age.xlsx,其中我在计算事件的天数(粒度级别,我必须以小时为单位计算年龄)我遇到了一种情况,我必须计算以下两种情况下的天数如何在python中将天数转换为小时,python,excel,pandas,datetime,datetime-conversion,Python,Excel,Pandas,Datetime,Datetime Conversion,我有一个Age.xlsx,其中我在计算事件的天数(粒度级别,我必须以小时为单位计算年龄)我遇到了一种情况,我必须计算以下两种情况下的天数 如果给出了完成日期,则天数=完成日期提交日期 如果完成日期为NaT(或空白)(如果事件仍未解决,则天数=L1+L2 此外,如何将天转换为小时,例如“2天08:00:00”转换为“56小时” 样本数据: Incident Status Priority Team Submit Date Completed D
Incident Status Priority Team Submit Date Completed Date L1 L2 No_of_days Age_in_Hours
INC0011 Pending Medium L2 2020-06-04 00:00:00 1 1
INC0012 completed High L2 2020-06-04 00:00:00 2020-06-08 02:00:00 2 2
INC0013 In progress Low L1 2020-06-05 00:00:00 1 2
INC0014 Assigned Medium L1 2020-06-05 00:00:00 1 3
INC0015 completed High L2 2020-06-05 00:00:00 2020-06-05 01:00:00 0 1
Sampel代码:
data = pd.read_excel('C:\Age.xlsx')
x=(data['Completed Date']- data['Submit Date'])
答案如下:
a) 如果给出了完成日期,则天数=完成日期提交日期
df['No_of_days'] = df['Completed Date'] - df['Submit Date']
b) 此外,如何将天转换为小时,例如“2天08:00:00”转换为“56小时”
c) 如果完成日期为NaT(或空白)(如果事件仍然开放,则天数=L1+L2(小时比日期容易)
我找到的最简单的方法是使用np.where
,它基本上是数组的if
语句。您可以查看更好的解释
答案如下:
a) 如果给出了完成日期,则天数=完成日期提交日期
df['No_of_days'] = df['Completed Date'] - df['Submit Date']
b) 此外,如何将天转换为小时,例如“2天08:00:00”转换为“56小时”
c) 如果完成日期为NaT(或空白)(如果事件仍然开放,则天数=L1+L2(小时比日期容易)
我找到的最简单的方法是使用np.where
,它基本上是数组的if
语句。您可以查看更好的解释
您可以根据是否填写完成日期列创建布尔掩码,并使用
loc
有条件地填写天数列:
- 如果有完成日期,则取完成日期减去开始日期
- 它不是,取
和L1
之和,并为这么多天做一个L2
pandas.Timedelta
“无天数”
列全部为Timedelta
,然后您可以轻松地按分区将其转换为小时:
#mask is where "Completed Date" is null
mask = df['Completed Date'].isnull()
df.loc[~mask, 'No_of_days'] = df['Completed Date'][~mask] - df['Submit Date'][~mask]
df.loc[mask, 'No_of_days'] = pd.to_timedelta(df['L1'][mask] + df['L2'][mask], unit='days')
df['Age_in_Hours'] = df['No_of_days']/pd.Timedelta(hours=1)
请注意,有完成日期的时间与没有完成日期的时间在精度上存在差异(因为
L1
和L2
不提供小时)。您可以根据是否填写完成日期列创建布尔掩码,并使用loc
有条件地填写天数列:
- 如果有完成日期,则取完成日期减去开始日期
- 它不是,取
和L1
之和,并为这么多天做一个L2
pandas.Timedelta
“无天数”
列全部为Timedelta
,然后您可以轻松地按分区将其转换为小时:
#mask is where "Completed Date" is null
mask = df['Completed Date'].isnull()
df.loc[~mask, 'No_of_days'] = df['Completed Date'][~mask] - df['Submit Date'][~mask]
df.loc[mask, 'No_of_days'] = pd.to_timedelta(df['L1'][mask] + df['L2'][mask], unit='days')
df['Age_in_Hours'] = df['No_of_days']/pd.Timedelta(hours=1)
请注意,有完成日期的时间与没有完成日期的时间在精度上存在差异(因为
L1
和L2
不提供小时)。如果是时间增量,您可以始终使用td.total_seconds()/3600获得小时如果是时间增量,您可以始终使用td.total_seconds()/3600获得小时