无法转换此列的数据时间(对象到时间)

Unable convert the data time of this column (object to time)

我有一个如下所示的数据框数据类型

    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

我想将年列数据类型转换为日期时间。我使用了下面的代码。

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

如何转换此列(对象为日期时间)的数据时间? 我怎样才能减少秒和微秒?

Expected output

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

由于您的 year 列中目前没有实际日期,您需要设置一个默认日期。然后你可以将格式传递给 pandas to_datetime 函数。

这可以像这样在一行中完成:

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

使用to_datetime with Series.dt.strftime:

timefmt = "%H:%M"
test['year'] = pd.to_datetime(test['year'], errors='coerce').dt.strftime(timefmt)

print (test)
  usr_id   year
0   t961  00:50
1   t964  03:25
2   t335  00:55
3   t829  00:04

或者您可以将 Series.str.rsplitn=1 一起使用,通过索引将最后 : 和 select 第一个列表拆分:

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]