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

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

熊貓:如何處理奇怪的時間格式

熊貓:如何處理奇怪的時間格式

嗶嗶one 2022-12-20 16:35:47
我有以下 Pandas 數據框,其中時間(持續時間)以一種非常奇怪的格式給出:Person   Activity   Duration1        A          1 00:002        A          1 00:003        B          0 21:174        C          0 17:11其中1 00:00表示 24 小時,0 21:17表示 0 天和 21:17 小時,也就是說只有 21:17 小時??焖俨榭?dtypes 返回:In[1]: df.dtypesOut[1]: Person         objectActivity       objectDuration       objectdtype: object如果值為 ,我如何始終如一地對待該Duration列以返回 24 1 00:00,如果我有,則返回持續時間的十進制值0 21:17?的十進制值為0 21:1721.283。結果應該是:Person   Activity   Duration1        A          242        A          243        B          21.2834        C          17.183
查看完整描述

5 回答

?
慕少森

TA貢獻2019條經驗 獲得超9個贊

a = np.array([24, 1, 1/60])    

df.Duration = df.Duration.str.split(' |:', expand=True).astype(int).dot(a)

例子:


df = pd.DataFrame({'Person': [1,2,3,4], "Activity": list('AABC') ,"Duration":['1 00:00', '1 00:00', '0 21:17', '0 17:11']})

df.Duration = df.Duration.str.split(' |:', expand=True).astype(int).dot(a)

print(df)

#   Person Activity   Duration

#0       1        A  24.000000

#1       2        A  24.000000

#2       3        B  21.283333

#3       4        C  17.183333


查看完整回答
反對 回復 2022-12-20
?
森欄

TA貢獻1810條經驗 獲得超5個贊

正如您提到的,它不會超過 1 00:00,即 24:00,有一種更簡單的方法:


'''

Person  Activity    Duration

1   A   1 00:00

2   A   1 00:00

3   B   0 21:17

4   C   0 17:11

'''


import pandas as pd


df = pd.read_clipboard("\t")

.


   Person Activity Duration

0       1        A  1 00:00

1       2        A  1 00:00

2       3        B  0 21:17

3       4        C  0 17:11   

.


df['Duration'] = df['Duration'].str.split(' ')


df['Duration'] = ['24:00' if int(val[0]) == 1 else val[1] for val in df['Duration']]


print(df)

.


   Person Activity Duration

0       1        A    24:00

1       2        A    24:00

2       3        B    21:17

3       4        C    17:11


查看完整回答
反對 回復 2022-12-20
?
繁花不似錦

TA貢獻1851條經驗 獲得超4個贊

您可以輕松地將這些數字相乘和相加:


durations = [   

    "1 00:00",

    "0 21:17",          

]                                                                        


for duration in durations: 

    day, clock = duration.split()

    hour, minute = clock.split(':')

    print((int(day) * 24) + int(hour) + (int(minute) / 60))


查看完整回答
反對 回復 2022-12-20
?
青春有我

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

您可以使用 datetime 模塊進行時間轉換


from datetime import datetime

def durationInDecimal(string):

    day, time = string.split(" ")

    t = datetime.strptime(time, "%H:%M").time()

    return int(day)*24 + (t.hour+t.minute/60.0)



df = pd.DataFrame({'Person': list("ABCD"), "Activity": list('ABCD') ,"duration":['1 00:00', '1 00:00', '0 21:17', '0 17:11']})

df["duration"] = df.duration.apply(durationInDecimal)


# Person    Activity    duration

# 0 A   A   24.000000

# 1 B   B   24.000000

# 2 C   C   21.283333

# 3 D   D   17.183333


查看完整回答
反對 回復 2022-12-20
?
明月笑刀無情

TA貢獻1828條經驗 獲得超4個贊

除了其他有用的答案之外,我還想發布我自己的解決方案,它使用自定義函數并將其應用于數據框df.apply:


def custom_time_to_decimals(value):

    if value.split()[0]=='1':

        return 24

    else:

        custom = value.split()[1]

        hours = int(custom[0:2])

        minutes = int(custom[3:5])

        decimal = hours + (minutes/60)

        return round(decimal,3)


df['decimalHours'] = df['<insertYourTimeColumnHere>'].apply(custom_time_to_decimals)


查看完整回答
反對 回復 2022-12-20
  • 5 回答
  • 0 關注
  • 175 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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