您需要:
usg = pd.DataFrame({'duration':['7h 39m 40s','15h 39m 40s','39m 40s']})
print (usg)
usg['duration'] = np.where(usg.duration.str.contains('h'),
pd.to_datetime(usg['duration'], format='%Hh %Mm %Ss', errors='coerce'),
pd.to_datetime(usg['duration'], format='%Mm %Ss',errors='coerce'))
print (usg)
duration
0 1900-01-01 07:39:40
1 1900-01-01 15:39:40
2 1900-01-01 00:39:40
另一種解決方案:
usg['duration'] = pd.to_datetime(usg['duration'].where(usg.duration.str.contains('h'),
'0h '+ usg['duration']),format='%Hh %Mm %Ss')
print (usg)
duration
0 1900-01-01 07:39:40
1 1900-01-01 15:39:40
2 1900-01-01 00:39:40
usg.loc[~usg.duration.str.contains('h'), 'duration'] = '0h '+ usg['duration']
usg['duration'] = pd.to_datetime(usg['duration'], format='%Hh %Mm %Ss')
print (usg)
duration
0 1900-01-01 07:39:40
1 1900-01-01 15:39:40
2 1900-01-01 00:39:40
這將失敗在OP的樣本數據,也沒有張貼代碼片段,因爲這不是對別人有用。您應該發佈一個完整的代碼示例,演示這適用於OP – EdChum
這不會失敗。 –
對不起,我在我的數據中遺漏了's',重點仍然存在,請不要發佈短代碼片段,答案應該與樣本數據,代碼和產生的輸出一起完整,因爲它目前看起來像一條評論 – EdChum