亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將 Azure 備份報告持續時間列轉換為帶十進制數的日期時間

如何將 Azure 備份報告持續時間列轉換為帶十進制數的日期時間

繁花不似錦 2023-03-01 15:38:05
Azure 云備份報告中的 Duration 列似乎有一個有趣的時間格式(小時后和分鐘后為十進制)。你能幫忙把小時、分鐘和秒部分四舍五入,使該列以小時為單位嗎?1.05:27:39.947072421:17.721:41.41.02:42:37.113681121: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.77561391    03:31:17.06782621    04:41:32.72537651    03:11:18.33965881    04:51:20.2017034           ...       1    02:21:17.85540951    02:21:19.55470751    03:41:23.88768121    02:21:32.55291601    02:01:20.3247238appended_data['DurationFixed']1   02:01:201   02:01:201   02:01:201   02:01:201   02:01:20      ...   1   02:01:201   02:01:201   02:01:201   02:01:201   02:01:20謝謝
查看完整描述

2 回答

?
largeQ

TA貢獻2039條經驗 獲得超8個贊

根據數據分析,我可以得出結論,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)


查看完整回答
反對 回復 2023-03-01
?
動漫人物

TA貢獻1815條經驗 獲得超10個贊

似乎是一個奇怪的錯誤,因為我從未見過像這樣來自 azure 的任何日志 - 無論如何,除非有一些內置方法來處理這樣的數據,否則我們將需要手動解析它。


在重新創建時間增量字符串之前,我們將拆分:然后舍入數字。


我必須明確地說,這不是真正的解決方法,因為您需要限定什么1.05是 1 小時零 x 分鐘?


如果您不關心以上內容,那么以下內容應該有效。


方法 1 無精度,字符串格式。

print(df)


             Duration

0  1.05:27:39.9470724

1             21:17.7

2             21:41.4

3  1.02:42:37.1136811

4             21:17.2

df['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 DurationFixed

0  1.05:27:39.9470724      01:27:40

1             21:17.7      21:18:00

2             21:41.4      21:41:00

3  1.02:42:37.1136811      01:42:37

4             21:17.2      21:17:00

如果你只想要幾個小時,你可以使用np.timedelta64


import numpy as np


df['DurationFixed'] / np.timedelta64(1,'h')

0     1.461111

1    21.300000

2    21.683333

3     1.710278

4    21.283333

Name: 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_delta

0 0   1.050000

  1  27.000000

  2  39.947072

1 0  21.000000

  1  17.700000

2 0  21.000000

  1  41.400000

3 0   1.020000

  1  42.000000

  2  37.113681

4 0  21.000000

  1  17.200000

s['metadata'] = s.groupby(level=0).cumcount().map({0 : 'h', 1 : 'm', 2 : 's' })


print(s)


    time_delta metadata

0 0   1.050000        h

  1  27.000000        m

  2  39.947072        s

1 0  21.000000        h

  1  17.700000        m

2 0  21.000000        h

  1  41.400000        m

3 0   1.020000        h

  1  42.000000        m

  2  37.113681        s

4 0  21.000000        h

  1  17.200000        m

apply最后,我們在行級別使用 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 DurationPrecise

0  1.05:27:39.9470724      01:27:40        01:30:40

1             21:17.7      21:18:00        21:17:40

2             21:41.4      21:41:00        21:41:20

3  1.02:42:37.1136811      01:42:37        01:43:50

4             21:17.2      21:17:00        21:17:10


查看完整回答
反對 回復 2023-03-01
  • 2 回答
  • 0 關注
  • 134 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號