Python Pandas:将DataFrame中mm:ss格式字符串时间转为浮点型总分钟数
把DataFrame中"分钟:秒"格式字符串转换为总分钟数
方法1:拆分字符串直接计算
这是最直观的实现方式,将时间字符串按冒号拆分后提取分钟和秒,直接计算总分钟数:
import pandas as pd # 示例数据 df = pd.DataFrame({"Time": ["125:19", "0:00", "45:30", "10:05"]}) # 拆分分钟和秒为独立列,转换为浮点型 df[["mins", "secs"]] = df["Time"].str.split(":", expand=True).astype(float) # 计算总分钟数:分钟数 + 秒数/60 df["Time_minutes"] = df["mins"] + df["secs"] / 60 # 可选:删除中间生成的辅助列 df = df.drop(["mins", "secs"], axis=1)
方法2:正则提取+一行式计算
如果不想生成中间列,可以用正则提取数值后直接计算,代码更紧凑:
import pandas as pd df = pd.DataFrame({"Time": ["125:19", "0:00", "45:30", "10:05"]}) # 提取冒号前后的数字,转换为浮点型后计算总分钟数 df["Time_minutes"] = df["Time"].str.extract(r"(\d+):(\d+)")\ .astype(float)\ .apply(lambda row: row[0] + row[1]/60, axis=1)
方法3:利用pandas timedelta类型处理
如果习惯用时间类型操作,可以将分钟和秒转换为timedelta对象,再转换为总分钟数:
import pandas as pd df = pd.DataFrame({"Time": ["125:19", "0:00", "45:30", "10:05"]}) # 分别构造分钟和秒的timedelta,求和后转换为总秒数再除以60得到分钟数 df["Time_minutes"] = (pd.to_timedelta(df["Time"].str.split(":").str[0] + "m") + pd.to_timedelta(df["Time"].str.split(":").str[1] + "s"))\ .dt.total_seconds() / 60
这几种方法都比嵌套lambda的写法更简洁易读,根据自己的习惯选择即可。
内容的提问来源于stack exchange,提问作者PineNuts0
相关产品推荐
相关产品推荐

