如何从Pandas DataFrame列单元格中提取时间的小时与分钟部分
Pandas提取带AM/PM时间字段的小时分钟实现方法
针对DataFrame列中存储的"04:38:00 AM"这类带上午/下午标识的时间值,可根据数据格式特征和后续分析需求,选择以下任意一种方法提取得到"04:38"格式的小时分钟内容:
方法1:固定长度字符串切片(适用格式完全统一场景)
当所有时间字符串的小时部分固定为两位补零格式(即长度、结构无偏移)时,可直接通过字符串切片取前5位字符,恰好匹配HH:MM的结构:
# 假设待处理列名为 'time_raw' df['time_hm'] = df['time_raw'].str[:5]
- 优势:计算效率最高,逻辑最简单
- 局限:如果存在小时位未补零(如
"9:05:00 AM")、字符串长度不统一的情况,会出现提取错位
方法2:正则匹配提取(鲁棒性强,适配非完全统一格式)
通过正则匹配抓取字符串开头的“小时:分钟”数字组合,不依赖固定字符串长度,即使存在小时位不补零的情况也能正确提取:
df['time_hm'] = df['time_raw'].str.extract(r'(\d{1,2}:\d{2})', expand=False)
- 优势:适配性更强,可自动跳过后续的秒数、AM/PM标识部分
方法3:转换为标准时间类型后格式化(推荐用于后续分析场景)
如果后续需要基于时间开展计算、筛选等操作,优先将字符串列转换为Pandas内置datetime类型后再格式化,从根源上避免字符串解析带来的误差:
# 第一步:按带AM/PM的12小时制格式解析时间字符串 df['time_parsed'] = pd.to_datetime(df['time_raw'], format='%I:%M:%S %p') # 第二步:格式化为目标的小时分钟格式 # 若需保留原12小时制的显示效果(如04:38 AM输出04:38),用%I:%M df['time_hm'] = df['time_parsed'].dt.strftime('%I:%M') # 若需转换为24小时制显示(如04:38 PM输出16:38),替换为'%H:%M'即可
- 优势:可自动识别缺失值、格式异常值,转换后的时间列可直接支持各类时间维度的计算操作
验证示例:对原始值
"04:38:00 AM",三种方法均可稳定输出目标值"04:38"
内容的提问来源于stack exchange,提问作者Usman Shaikh
相关产品推荐
相关产品推荐

