0

0

Pandas中将hh:mm:ss时间格式转换为总分钟数

碧海醫心

碧海醫心

发布时间:2025-07-21 13:46:16

|

754人浏览过

|

来源于php中文网

原创

pandas中将hh:mm:ss时间格式转换为总分钟数

本文旨在详细阐述如何在Pandas DataFrame中,高效且准确地将hh:mm:ss格式的时间字符串转换为以分钟为单位的数值。我们将探讨两种主要方法:一是使用字符串分割和Lambda函数进行手动计算,二是利用Pandas内置的to_timedelta函数进行更简洁、健壮的转换。文章将提供清晰的代码示例,并分析常见错误,帮助读者掌握在数据处理中进行时间格式转换的最佳实践。

在数据分析和处理中,我们经常会遇到需要将特定格式的时间字符串转换为数值类型以进行计算或分析的场景。例如,将hh:mm:ss(小时:分钟:秒)格式的时间转换为总分钟数,这对于计算持续时间、效率指标等非常有用。

考虑以下示例DataFrame:

import pandas as pd

df = pd.DataFrame({
    'Name': ["Jim", "Chrissy", "Billy"],
    'Time': ['1:33:04', '0:06:39', '10:00:02']
})
print("原始DataFrame:")
print(df)

我们的目标是创建一个新列,将Time列中的hh:mm:ss格式转换为总分钟数,例如10:00:02应转换为600.03分钟。

方法一:使用字符串分割 (str.split) 和 Lambda 函数

这种方法通过将时间字符串按冒号分割成小时、分钟和秒,然后手动进行数学运算来计算总分钟数。

常见错误分析

在尝试手动转换时,可能会遇到一些常见的错误。例如,一个常见的错误尝试是:

# 错误的尝试,会产生NameError
# df['_timemin'] = df['Time'].str.split(':').apply(lambda x: (int(x[0])*60) + int(x[1])) + int(x[2]/60)

这个错误尝试存在几个问题:

  1. apply方法未正确闭合: apply(lambda x: ...) 后的括号没有正确匹配,导致后续的 + int(x[2]/60) 不在 apply 的作用域内,x 自然就未定义。
  2. 数据类型转换不完整: x[2](秒数)在进行除法运算前未转换为数值类型。
  3. 索引使用不当: 即使修正了语法,x 是一个列表,x[0]、x[1]、x[2] 分别代表小时、分钟、秒,都需要正确地转换为整数再进行计算。

正确的实现

为了正确实现,我们需要确保Lambda函数内部包含了所有的计算逻辑,并且所有字符串片段都已转换为数值类型。

1. 转换为整数分钟(向下取整)

SoftGist
SoftGist

SoftGist是一个软件工具目录站,每天为您带来最好、最令人兴奋的软件新产品。

下载

如果需要将秒数转换为分钟后进行向下取整(例如,60秒算作1分钟,59秒算作0分钟),可以使用整数除法 //。

df['_timemin_int'] = df['Time'].str.split(':').apply(
    lambda x: int(x[0]) * 60 + int(x[1]) + int(x[2]) // 60
)
print("\n使用str.split和apply转换为整数分钟:")
print(df)

2. 转换为浮点分钟

如果需要更精确的浮点分钟数,可以使用浮点除法 /。

df['_timemin_float'] = df['Time'].str.split(':').apply(
    lambda x: int(x[0]) * 60 + int(x[1]) + int(x[2]) / 60
)
print("\n使用str.split和apply转换为浮点分钟:")
print(df)

这种方法的优点是直观,易于理解其内部逻辑。然而,它相对繁琐,且在处理非标准时间格式时不够健壮。

方法二:利用 Pandas 的 to_timedelta 函数(推荐)

Pandas 提供了一个更强大、更推荐的工具 pd.to_timedelta,它可以将多种时间字符串格式转换为Timedelta对象。Timedelta对象表示一个时间差,我们可以轻松地从中提取总秒数,然后转换为分钟。

这种方法更符合Pandas的惯用法,代码更简洁,并且在处理各种时间格式时更健壮。

# 重新创建DataFrame以展示干净的转换
df_td = pd.DataFrame({
    'Name': ["Jim", "Chrissy", "Billy"],
    'Time': ['1:33:04', '0:06:39', '10:00:02']
})

# 将时间字符串转换为Timedelta对象
df_td['TimeDelta'] = pd.to_timedelta(df_td['Time'])

# 从Timedelta对象中提取总秒数,然后转换为分钟
df_td['_timemin_td'] = df_td['TimeDelta'].dt.total_seconds() / 60

print("\n使用pd.to_timedelta进行转换:")
print(df_td)

优点:

  • 简洁性: 代码量少,可读性高。
  • 健壮性: pd.to_timedelta能够智能地解析多种时间格式,甚至可以处理一些不规范的输入(通过errors参数)。
  • 性能: 对于大型数据集,Pandas的向量化操作通常比apply结合Python循环更快。
  • 功能丰富: Timedelta对象本身提供了丰富的属性和方法,方便进行进一步的时间差计算。

注意事项与总结

  1. 数据类型转换: 在进行数值计算前,务必确保将字符串转换为正确的数值类型(int或float)。这是避免TypeError或逻辑错误的关键。
  2. 精度选择: 根据实际需求选择是保留浮点精度(/)还是进行整数分钟的向下取整(//)。
  3. 推荐 pd.to_timedelta: 对于Pandas中的时间数据处理,强烈推荐使用pd.to_timedelta。它不仅代码简洁、易于维护,而且在处理复杂时间逻辑和大规模数据时表现更优。
  4. 错误处理: 如果时间列中可能存在无效或缺失值,pd.to_timedelta的errors参数非常有用。例如,pd.to_timedelta(df['Time'], errors='coerce') 会将无法解析的值转换为NaT(Not a Time),从而避免程序崩溃。

通过掌握上述方法,您可以高效、准确地在Pandas中进行时间格式的转换,为后续的数据分析奠定坚实基础。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Python 时间序列分析与预测
Python 时间序列分析与预测

本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

57

2025.12.04

数据类型有哪几种
数据类型有哪几种

数据类型有整型、浮点型、字符型、字符串型、布尔型、数组、结构体和枚举等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

309

2023.10.31

php数据类型
php数据类型

本专题整合了php数据类型相关内容,阅读专题下面的文章了解更多详细内容。

222

2025.10.31

css中float用法
css中float用法

css中float属性允许元素脱离文档流并沿其父元素边缘排列,用于创建并排列、对齐文本图像、浮动菜单边栏和重叠元素。想了解更多float的相关内容,可以阅读本专题下面的文章。

579

2024.04.28

C++中int、float和double的区别
C++中int、float和double的区别

本专题整合了c++中int和double的区别,阅读专题下面的文章了解更多详细内容。

102

2025.10.23

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

298

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

212

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1501

2023.10.24

俄罗斯Yandex引擎入口
俄罗斯Yandex引擎入口

2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。

158

2026.01.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.3万人学习

Django 教程
Django 教程

共28课时 | 3.6万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号