Pandas是否有功能可每日从datetime列提取指定时间戳?
解决方案
步骤1:转换时间列格式
首先需要将timestamp列转换为Pandas内置的datetime类型,才能方便后续的时间维度筛选:
import pandas as pd # 若原timestamp列为字符串格式,执行该转换 df['timestamp'] = pd.to_datetime(df['timestamp'])
步骤2:基础筛选逻辑(固定匹配16:00:03)
如果确认所有日期下最接近16点的tick固定为16:00:03,可以直接匹配时间部分,无需手动录入每日日期:
# 定义目标时分秒 target_time = pd.to_datetime("16:00:03").time() # 直接筛选全数据集中所有日期16:00:03的记录 df_filtered = df[df['timestamp'].dt.time == target_time]
步骤3:追加筛选条件
根据你的需求二选一即可:
方案A:按指定月份筛选
# 示例为筛选2021年8月的记录,修改目标月份即可适配其他月份 target_month = "2021-08" df_filtered = df[ (df['timestamp'].dt.time == target_time) & (df['timestamp'].dt.to_period('M') == target_month) ]
方案B:按起止日期范围筛选
# 示例为筛选2021-08-02到2021-08-06的记录,修改起止值即可适配其他范围 start_date = "2021-08-02" end_date = "2021-08-06" df_filtered = df[ (df['timestamp'].dt.time == target_time) & (df['timestamp'].between(start_date, end_date, inclusive='both')) ]
拓展通用方案:自动取每日最接近16点的tick
如果存在部分日期的最接近16点tick秒数不固定的情况(比如你给出的样例中9月的tick秒数为02),可以用下面的逻辑自动匹配,不需要固定目标时间:
# 生成对应日期的16点整对照时间 df['date'] = df['timestamp'].dt.date df['target_datetime'] = pd.to_datetime(df['date'].astype(str) + " 16:00:00") # 计算每条记录与当日16点的时间差绝对值 df['time_diff'] = abs(df['timestamp'] - df['target_datetime']) # 按日期分组,取每个日期下时间差最小的记录 df_filtered = df.sort_values('time_diff').groupby('date').head(1).sort_values('timestamp').drop(columns=['date', 'target_datetime', 'time_diff']) # 同样可以在该逻辑基础上追加上述的月份/日期范围筛选条件
内容的提问来源于stack exchange,提问作者Kyle
相关产品推荐
相关产品推荐

