如何将 Azure 备份报告持续时间列转换为带十进制数的日期时间

Azure 云备份报告中的 Duration 列似乎有一个有趣的时间格式(小时后和分钟后为十进制)。你能帮忙把小时、分钟和秒部分四舍五入,使该列以小时为单位吗?


1.05:27:39.9470724

21:17.7

21:41.4

1.02:42:37.1136811

21:17.2

我试图格式化微秒部分,但不确定如何解决小时部分中的这些小数。很高兴排除这些小数。


appended_data['Duration'] = pd.to_datetime(appended_data['Duration'], format='%H:%M:%S.%f')

ValueError: time data '1.05:27:39.9470724' does not match format '%H:%M:%S.%f' (match)

appended_data['Backup Size'] = appended_data['Backup Size'].str.replace('MB','')

appended_data['DurationFixed'] = pd.to_timedelta(df['Duration'].str.split(':',expand=True)\

                    .stack()\

                    .astype(float)\

                    .round()\

                    .astype(int).astype(str).unstack(1).fillna('00').agg(':'.join,axis=1),

               unit='s')

appended_data['DurationHours'] = appended_data['DurationFixed'] / np.timedelta64(1,'h')




appended_data['Duration']

1    04:01:22.7756139

1    03:31:17.0678262

1    04:41:32.7253765

1    03:11:18.3396588

1    04:51:20.2017034

           ...       

1    02:21:17.8554095

1    02:21:19.5547075

1    03:41:23.8876812

1    02:21:32.5529160

1    02:01:20.3247238



appended_data['DurationFixed']

1   02:01:20

1   02:01:20

1   02:01:20

1   02:01:20

1   02:01:20

      ...   

1   02:01:20

1   02:01:20

1   02:01:20

1   02:01:20

1   02:01:20


谢谢


繁花不似锦
浏览 110回答 2
2回答

largeQ

根据数据分析,我可以得出结论,hh 部分的小数位实际上是天。示例 2.4:30:30 = 2 天 4 小时 30 分钟 30 秒。def cleanhours(x):    hms=x.split(":")    dh=hms[0].split(".")    if len(dh)>1:        hms[0]=str(int(dh[-1])+24*int(dh[-2]))    hms[2] = hms[2].split(".")[0]    return int(hms[0])+int(hms[1])/60.0+int(hms[2])/3600.0#     return ":".join(hms)

动漫人物

似乎是一个奇怪的错误,因为我从未见过像这样来自 azure 的任何日志 - 无论如何,除非有一些内置方法来处理这样的数据,否则我们将需要手动解析它。在重新创建时间增量字符串之前,我们将拆分:然后舍入数字。我必须明确地说,这不是真正的解决方法,因为您需要限定什么1.05是 1 小时零 x 分钟?如果您不关心以上内容,那么以下内容应该有效。方法 1 无精度,字符串格式。print(df)             Duration0  1.05:27:39.94707241             21:17.72             21:41.43  1.02:42:37.11368114             21:17.2df['DurationFixed'] = pd.to_timedelta(df['Duration'].str.split(':',expand=True)\                    .stack()\                    .astype(float)\                    .round()\                    .astype(int).astype(str).unstack(1).fillna('00').agg(':'.join,axis=1),               unit='s')                print(df)           Duration DurationFixed0  1.05:27:39.9470724      01:27:401             21:17.7      21:18:002             21:41.4      21:41:003  1.02:42:37.1136811      01:42:374             21:17.2      21:17:00如果你只想要几个小时,你可以使用np.timedelta64import numpy as npdf['DurationFixed'] / np.timedelta64(1,'h')0     1.4611111    21.3000002    21.6833333     1.7102784    21.283333Name: DurationFixed, dtype: float64方法 2 更精确。如果您的数据格式相同 - 即Hours : Minutes : Seconds我们可以堆叠并应用累积计数并映射元数据字段以pd.to_timedelta在行级别使用我们的。s = df['Duration'].str.split(':',expand=True)\                    .stack()\                    .astype(float).to_frame('time_delta')print(s)     time_delta0 0   1.050000  1  27.000000  2  39.9470721 0  21.000000  1  17.7000002 0  21.000000  1  41.4000003 0   1.020000  1  42.000000  2  37.1136814 0  21.000000  1  17.200000s['metadata'] = s.groupby(level=0).cumcount().map({0 : 'h', 1 : 'm', 2 : 's' })print(s)    time_delta metadata0 0   1.050000        h  1  27.000000        m  2  39.947072        s1 0  21.000000        h  1  17.700000        m2 0  21.000000        h  1  41.400000        m3 0   1.020000        h  1  42.000000        m  2  37.113681        s4 0  21.000000        h  1  17.200000        mapply最后,我们在行级别使用 an将每一行转换为它的 repective 格式并四舍五入到最接近的n秒数。我选了10个。df['DurationPrecise'] = s.apply(lambda x : pd.to_timedelta(x.time_delta,                                x.metadata,errors='coerce'),axis=1)\                        .groupby(level=0).sum().dt.round('10s')print(df)             Duration DurationFixed DurationPrecise0  1.05:27:39.9470724      01:27:40        01:30:401             21:17.7      21:18:00        21:17:402             21:41.4      21:41:00        21:41:203  1.02:42:37.1136811      01:42:37        01:43:504             21:17.2      21:17:00        21:17:10
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python