如何将 datetime.datetime 值转换为 pandas df 列中的 datetime.time 值

How to convert a few datetime.datetime values to datetime.time values in a pandas df column

我自己尝试了太久之后,我的问题是: 我有一个包含 20.000 行的 df。其中一列包含患者入院的时间 (H:M:S)。

几乎所有值的类型都是:datetime.time。示例:09:45:00.

少数类型为:datetime.datetime。示例:1899-12-30 00:00:00.

df.info() 将对象作为整个列的类型

如何将这几个 datetime.datetime 值转换为 datetime.time?我试过这些。没有错误,但同时类型没有变化....

import datetime as dt

for idx, value in enumerate(df.Opnametijd):
    if type(value) == 'datetime.datetime':
        value = pd.to_datetime.time, format='%H:%M:%S'.apply(pd.Timestamp)

和:

for idx, value in enumerate(df.Opnametijd):
    if type(value) == 'datetime.datetime':
        df.loc[idx,value] = pd.to_datetime.time, format='%H:%M:%S'.apply(pd.Timestamp)

我也尝试删除非 datetime.time 类型的行,但这也不起作用: (index_names 的类型为:pandas.core.indexes.numeric.Int64Index)

index_names = df[ df'Opnametijd'] != 'datetime.time'].index
type(index_names)
df.drop(index_names,inplace=True)

提前感谢您的帮助! 问候一月

您可以应用一个 lambda 函数,returns 日期时间对象的时间部分 如果 元素是日期时间的实例 class,否则保留元素原样。

例如:

from datetime import datetime
import pandas as pd 

df = pd.DataFrame({'t': [datetime(2021,1,1,1,2,3).time(),
                         datetime(2021,1,1,1,2,3)]})

# df['t']
# 0               01:02:03
# 1    2021-01-01 01:02:03
# Name: t, dtype: object

df['t'] = df['t'].apply(lambda x: x.time() if isinstance(x, datetime) else x)

# df['t'] 
# 0    01:02:03
# 1    01:02:03
# Name: t, dtype: object

旁注:pandas 内置日期时间数据类型不单独处理日期和时间。如果你想使用它(我认为这比标准库的 datetime.time 更方便),你 必须 提供一个日期(如果你实际上不是,可以是任意的用它做点什么)。