如何从pandas datetime中去除日期部分,仅保留秒级时间?
仅保留秒级时间的Pandas时序索引解决方案
当然可以创建只包含秒级时间(含高分辨率小数部分)的索引,完全不需要保留日期信息。这里给你两种实用的实现方式:
方法1:提取累计秒数作为数值索引
直接从datetime列中提取当天0点开始的累计秒数(包含毫秒、微秒等细分部分),用这个数值作为索引,既保留了2500Hz采样的高分辨率时序信息,又剔除了无关的日期。
示例代码:
import pandas as pd # 假设你的数据有一列名为'datetime'的时序数据 df['total_seconds'] = df['datetime'].dt.total_seconds() df.set_index('total_seconds', inplace=True)
dt.total_seconds()返回的是从当天00:00:00开始的累计秒数,对于2500Hz的数据,每行的秒数间隔正好是1/2500=0.0004秒,完美匹配你的采样精度。
方法2:使用TimedeltaIndex时间差索引
如果更偏好时间格式而非纯数值,可以将datetime转换为当天的时间差,用TimedeltaIndex作为索引,同样不带日期信息。
示例代码:
# 计算当前时间与当天0点的时间差 df['time_delta'] = df['datetime'] - df['datetime'].dt.normalize() # 设置为时间差索引 df.set_index(pd.TimedeltaIndex(df['time_delta']), inplace=True)
dt.normalize()会把datetime的时间部分归零得到当天0点,两者相减得到的时间差会以类似00:01:23.456789的格式显示,但实际存储的是时间差数值,完全不包含日期。
小提醒
- 如果你的数据涉及多天,这种仅保留当天秒数的索引会出现重复(不同日期的同一秒会被视为相同索引),但单天数据完全没问题。
- 两种方式都支持Pandas的常规时序操作,比如按时间切片、重采样等,和datetime索引的使用逻辑一致。
内容的提问来源于stack exchange,提问作者Angus Campbell
相关产品推荐
相关产品推荐

