Python 无法将此列的数据时间(对象转换为时间)

Python 无法将此列的数据时间(对象转换为时间),python,pandas,dataframe,datetime,python-datetime,Python,Pandas,Dataframe,Datetime,Python Datetime,我有一个数据框,数据类型如下 usr_id year 0 t961 00:50:03.158000 1 t964 03:25:57 2 t335 00:55:00 3 t829 00:04:25.714000 usr_id object year object dtype: object 我想将year列数据类型转换为datetime。我使用了下面的代码 timefmt = "%H:%M" test['year'] = pd

我有一个数据框,数据类型如下

    usr_id  year
0   t961    00:50:03.158000
1   t964    03:25:57
2   t335    00:55:00
3   t829    00:04:25.714000


usr_id    object
year      object
dtype: object
我想将year列数据类型转换为datetime。我使用了下面的代码

timefmt = "%H:%M"
test['year'] = pd.to_datetime(
    test['year'], format=timefmt, errors='coerce').dt.time
我的产量不足

    usr_id  year
0   t961    NaT
1   t964    NaT
2   t335    NaT
3   t829    NaT
如何将此列的数据时间(对象)转换为日期时间? 如何降低秒数和微秒数

预期产量


由于
年份
列中当前没有实际日期,因此需要设置默认日期。然后可以将格式传递给pandas
to_datetime
函数

这可以在一个衬里中完成,如下所示:

test['year'] = pd.to_datetime(test['year'].apply(lambda x: '1900-01-01 '+ x),format='%Y-%m-%d %H:%M:%S')
用于:

或者您可以使用with
n=1
按最后一个
进行拆分,并通过索引选择第一个列表:

test['year'] = test['year'].str.rsplit(':', n=1).str[0]
print (test)
  usr_id   year
0   t961  00:50
1   t964  03:25
2   t335  00:55
3   t829  00:04
或@Akira提供的解决方案:

test['year'] = test['year'].astype(str).str[:5] 

test['year']=test['year'].astype(str).str[0:5]
也会得到相同的输出
test['year'] = test['year'].str.rsplit(':', n=1).str[0]
print (test)
  usr_id   year
0   t961  00:50
1   t964  03:25
2   t335  00:55
3   t829  00:04
test['year'] = test['year'].astype(str).str[:5]