我有一个数据集,其中有一个列名为"时间"对象类型的。有些行表示10,有些行表示1000。如何将此列转换为时间格式
weather['Time'] = pd.to_datetime(weather['Time'], format='%H:%M').dt.Time
这是我使用的代码。我得到这个错误,ValueError:时间数据'10'不匹配格式'%H:%M'(匹配)
您可以先将列转换为所需的时间格式,如下所示
weather= pd.DataFrame(['1000','10:00','10','1000'],columns=list("Time"))
def convert_time(x):
if len(x) == 2:
return f'{x}:00'
if ':' not in x:
return x[:2] + ':' + x[2:]
return x
wheather.Time= wheather.Time.apply(convert_time)
wheather.Time
Out[1]:
0 10:00
1 10:00
2 10:00
3 10:00
将其转换为日期时间
wheather.Time = pd.to_datetime(wheather.Time)
只是时间分量
wheather.Time.dt.time
Out[92]:
0 10:00:00
1 10:00:00
2 10:00:00
3 10:00:00
另一种可能的解决方案,基于以下思路:
-
当
:
存在时,将其替换为空字符串 -
右pad加0,这样所有条目都是4位。
-
使用
pd.to_datetime
转换为所需的时间格式。
weather = pd.DataFrame({'Time': ['20', '1000', '12:30', '0930']})
pd.to_datetime(weather['Time'].str.replace(':', '').str.pad(
4, side='right', fillchar='0'), format='%H%M').dt.time
输出:
0 20:00:00
1 10:00:00
2 12:30:00
3 09:30:00
Name: Time, dtype: object