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

在Pandas DataFrame中识别时间的时、分、秒并封装为函数

如何识别DataFrame时间列的时/分/秒特定值并封装函数

第一步:先将时间列转为标准datetime类型

你的原始数据中Datetime列末尾带有多余的 0,需要先清理并转换为Pandas的datetime类型,否则无法使用时间相关操作:

import pandas as pd

# 模拟你的DataFrame
df = pd.DataFrame({
    'Datetime': [
        '2022-06-01 00:00:00 0',
        '2022-06-01 00:01:00 0',
        '2022-06-01 00:02:00 0',
        '2022-06-01 00:03:00 0',
        '2022-06-01 00:04:00 0'
    ]
})

# 清理字符串末尾的" 0",再转为datetime类型
df['Datetime'] = pd.to_datetime(df['Datetime'].str.rsplit(' ', 1).str[0])

第二步:直接识别特定时/分/秒的行

利用Pandas的dt访问器,可以直接提取时间的小时、分钟、秒属性,再做等值判断:

  • 筛选小时为00的行:
    hour_0_rows = df[df['Datetime'].dt.hour == 0]
    
  • 筛选分钟为00的行:
    minute_0_rows = df[df['Datetime'].dt.minute == 0]
    
  • 筛选秒为00的行:
    second_0_rows = df[df['Datetime'].dt.second == 0]
    

第三步:封装为通用函数

如果需要重复使用这个逻辑,可以封装成一个函数,支持指定时间单位和目标值:

def filter_time_by_unit(df, col_name, time_unit, target_value):
    # 检查并转换列为datetime类型
    if not pd.api.types.is_datetime64_any_dtype(df[col_name]):
        # 这里的清洗逻辑可根据你的实际数据调整,当前适配末尾带" 0"的情况
        df[col_name] = pd.to_datetime(df[col_name].str.rsplit(' ', 1).str[0])
    
    # 校验时间单位合法性
    valid_units = {'hour', 'minute', 'second'}
    if time_unit not in valid_units:
        raise ValueError(f"time_unit必须是{valid_units}中的一个")
    
    # 生成筛选掩码并返回结果
    time_attr = getattr(df[col_name].dt, time_unit)
    return df[time_attr == target_value]

函数使用示例

# 筛选小时为0的行
result_hour = filter_time_by_unit(df, 'Datetime', 'hour', 0)
print(result_hour)

# 筛选分钟为1的行
result_minute = filter_time_by_unit(df, 'Datetime', 'minute', 1)
print(result_minute)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 19:10:26