You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Unix时间戳提取当日秒数作为分类特征?

如何从Unix时间戳提取当日累计秒数作为时段特征?

我有一份时序数据,其中包含一列Unix秒级时间戳(还有其他列):

import pandas as pd

df = pd.DataFrame(
    {
        'user': [3,3,3,3,3,6,6,6],
        'timestamp': [1459467971, 1459468020, 1459468026, 1459468031, 
                      1459468036,1513974852, 1513974853, 1513974854]
    }
)

这份数据集用于事件分类任务,部分事件在早晨频发,其余则在下午频发,我认为**当日时段(time-of-day)**是该任务中的重要判别特征。我已经知道可以使用pd.to_datetime将时间戳转换为HH:MM:SS格式:

df['timestamp'] = pd.to_datetime(df['timestamp'], unit='s')
df['time'] = df['timestamp'].dt.time
print(df)

输出结果:

user           timestamp      time
0     3 2016-03-31 23:46:11  23:46:11
1     3 2016-03-31 23:47:00  23:47:00
2     3 2016-03-31 23:47:06  23:47:06
3     3 2016-03-31 23:47:11  23:47:11
4     3 2016-03-31 23:47:16  23:47:16
5     6 2017-12-22 20:34:12  20:34:12
6     6 2017-12-22 20:34:13  20:34:13
7     6 2017-12-22 20:34:14  20:34:14

现在想找到简便方法提取代表时段的累计秒数,得到如下结果:

user           timestamp  time-of-day
0     3 2016-03-31 23:46:11        85571
1     3 2016-03-31 23:47:00        85620
2     3 2016-03-31 23:47:06        85626
3     3 2016-03-31 23:47:11        85631
4     3 2016-03-31 23:47:16        85636
5     6 2017-12-22 20:34:12        74052
6     6 2017-12-22 20:34:13        74053
7     6 2017-12-22 20:34:14        74054

解决方案

这里有几种简洁高效的方法可以实现需求:

方法1:直接拆分时分秒计算

通过dt.hour、dt.minute、dt.second提取各时间分量,再转换为累计秒数:

df['timestamp'] = pd.to_datetime(df['timestamp'], unit='s')
df['time-of-day'] = df['timestamp'].dt.hour * 3600 + df['timestamp'].dt.minute * 60 + df['timestamp'].dt.second

方法2:计算与当日午夜的时间差

利用dt.normalize()获取当日午夜的时间戳,再计算时间差的总秒数:

df['timestamp'] = pd.to_datetime(df['timestamp'], unit='s')
# 获取当日午夜的datetime对象
midnight = df['timestamp'].dt.normalize()
# 计算时间差并转换为总秒数,转为整数类型
df['time-of-day'] = (df['timestamp'] - midnight).dt.total_seconds().astype(int)

方法3:转换为Timedelta后取总秒数

将dt.time转换为字符串后转为Timedelta类型,再提取总秒数:

df['timestamp'] = pd.to_datetime(df['timestamp'], unit='s')
df['time-of-day'] = pd.to_timedelta(df['timestamp'].dt.time.astype(str)).dt.total_seconds().astype(int)

以上三种方法都能得到你需要的time-of-day列,结果完全一致。


内容的提问来源于stack exchange,提问作者Amina Umar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 22:55:40