您需要:
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