如何将 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 更方便),你 必须 提供一个日期(如果你实际上不是,可以是任意的用它做点什么)。
我自己尝试了太久之后,我的问题是: 我有一个包含 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 更方便),你 必须 提供一个日期(如果你实际上不是,可以是任意的用它做点什么)。