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

如何清洗含小时与分钟的DataFrame列并统一转换为小时

将含小时/分钟的DataFrame列统一转换为小时单位

解决方案:通过正则提取数值与单位,批量换算

针对这类带时长单位的列,无需手动拆分后逐一处理,用正则提取数值和单位后批量换算更高效,以下分两种场景给出代码:

场景1:每行仅含单一单位(如"2小时"、"30分钟")

import pandas as pd

# 示例数据
df = pd.DataFrame({'时长': ['2小时', '30分钟', '5.5小时', '45分钟']})

# 提取数值和单位
df[['数值', '单位']] = df['时长'].str.extract(r'(\d+\.?\d*)\s*(小时|分钟)')
df['数值'] = df['数值'].astype(float)

# 换算为小时:小时数值保持不变,分钟数值除以60
df['总小时数'] = df.apply(lambda row: row['数值'] if row['单位'] == '小时' else row['数值']/60, axis=1)

场景2:每行含混合单位(如"1小时30分钟")

如果存在同一行同时包含小时和分钟的情况,需要提取所有时长片段后求和:

import pandas as pd

# 示例数据
df = pd.DataFrame({'时长': ['1小时30分钟', '2小时15分钟', '45分钟', '3小时']})

# 提取所有数值和单位(支持多行匹配)
extracted = df['时长'].str.extractall(r'(\d+\.?\d*)\s*(小时|分钟)')
extracted.columns = ['数值', '单位']
extracted['数值'] = extracted['数值'].astype(float)

# 换算为小时并按原行分组求和
extracted['小时数'] = extracted.apply(lambda x: x['数值'] if x['单位'] == '小时' else x['数值']/60, axis=1)
df['总小时数'] = extracted.groupby(level=0)['小时数'].sum()

说明

  • 正则表达式(\d+\.?\d*)\s*(小时|分钟)可以匹配整数、小数形式的时长数值,以及对应的单位;
  • 通过astype(float)将提取的字符串数值转为浮点数,确保计算精度;
  • 混合单位场景下用extractall捕获所有时长片段,再通过groupby(level=0)按原DataFrame的行索引分组求和,得到每行的总小时数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 10:20:39