在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
相关产品推荐
相关产品推荐

