如何使用pandas将仅含时分秒的列转换为无年月日的datetime格式?
首先明确:Pandas 不存在「不含年月日的datetime格式」,datetime64 类型的本质是时间戳,必须绑定日期信息,转换时自动补全年月日是该类型的固有特性。以下是适配不同场景的可行方案:
方案1:使用 timedelta 类型存储(推荐,性能最优)
该方案适合需要做时间比较、时间差计算的场景,timedelta 为 Pandas 原生支持的数值类型,无需绑定日期,性能与 datetime64 一致,不会变为 object 类型:
df['time'] = pd.to_timedelta(df['time'])
转换后可直接通过 dt 属性读取时间分量,示例:
- 获取总秒数:
df['time'].dt.total_seconds() - 获取小时数:
df['time'].dt.components.hours
方案2:保留 datetime64 类型,仅隐藏日期显示
如果需要使用 datetime 类型的内置方法,可接受底层默认携带的 1900-01-01 日期(不影响时分秒的运算与提取),仅在展示时隐藏日期:
- 先完成 datetime 转换:
df['time'] = pd.to_datetime(df['time'], format = "%H:%M:%S")
- 全局设置 Pandas datetime 显示格式,仅展示时分秒:
pd.set_option('display.datetime_format', '%H:%M:%S')
方案3:使用 Pandas 扩展 Time 类型(规避 object dtype)
如果必须存储纯时间对象,且不希望列类型为 object,可使用 Pandas 1.4 及以上版本提供的 Time 扩展类型:
from pandas.core.arrays.datetimes import TimeDtype df['time'] = pd.to_datetime(df['time'], format="%H:%M:%S").dt.time.astype(TimeDtype())
转换后列的 dtype 为专属的 time 类型,存储内容为 Python 原生 datetime.time 对象,支持时间相关操作。
内容的提问来源于stack exchange,提问作者Tekle
相关产品推荐
相关产品推荐

