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

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

本教程详细介绍了如何在Pandas DataFrame中,将’hh:mm:ss’字符串格式的时间数据转换为总分钟数。文章分析了常见的转换误区,并提供了基于字符串分割与数学运算的两种精确解决方案,包括整数分钟和浮点分钟的计算方法。此外,教程还推荐了使用Pandas内置时间序列功能pd.to_timedelta进行更健壮、高效的时间转换,并提供了代码示例及注意事项,帮助用户准确处理时间数据。

问题背景与数据准备

在数据处理中,我们经常会遇到时间数据以字符串形式存在的情况,例如’hh:mm:ss’。当需要对这类时间进行数值计算,比如将其转换为总分钟数时,就需要进行格式转换。本教程将指导您如何在pandas dataframe中高效且准确地完成这一任务。

假设我们有如下DataFrame,其中Time列为hh:mm:ss格式:

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

输出:

原始DataFrame:      Name      Time0      Jim   1:33:041  Chrissy   0:06:392    Billy  10:00:02

我们的目标是创建一个新列_timemin,将Time列转换为对应的总分钟数,例如10:00:02应转换为600.03分钟。

常见误区与错误分析

在尝试转换时,用户可能会遇到一些常见的错误。例如,以下代码尝试使用str.split和apply函数进行转换,但会产生NameError:

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

此代码存在以下几个主要问题:

apply方法未正确闭合: apply方法的作用域仅限于lambda x: (int(x[0])*60) + int(x[1])部分。+ int(x[2]/60)这部分代码在apply函数外部,导致无法访问lambda函数内部定义的变量x,从而引发NameError。字符串到数值的转换缺失: 即使apply方法正确闭合,x[2](秒数)在进行除法运算前也需要先转换为数值类型(int或float),否则会报错。

解决方案一:基于字符串分割与数学运算

这种方法直接将时间字符串分割成小时、分钟和秒,然后通过数学公式计算总分钟数。

import pandas as pddf = pd.DataFrame({'Name': ["Jim", "Chrissy", "Billy"], 'Time': ['1:33:04', '0:06:39', '10:00:02']})# 1. 计算总分钟数(秒数部分进行整数除法,即向下取整)# 公式:小时 * 60 + 分钟 + 秒 // 60df['_timemin_int_sec'] = df['Time'].str.split(':').apply(lambda x: int(x[0]) * 60 + int(x[1]) + int(x[2]) // 60)print("n使用整数秒数计算的总分钟数:")print(df)# 2. 计算总分钟数(秒数部分进行浮点除法,保留小数)# 公式:小时 * 60 + 分钟 + 秒 / 60df['_timemin_float_sec'] = df['Time'].str.split(':').apply(lambda x: int(x[0]) * 60 + int(x[1]) + int(x[2]) / 60)print("n使用浮点秒数计算的总分钟数:")print(df)

输出:

使用整数秒数计算的总分钟数:      Name      Time  _timemin_int_sec0      Jim   1:33:04                931  Chrissy   0:06:39                 62    Billy  10:00:02               600使用浮点秒数计算的总分钟数:      Name      Time  _timemin_float_sec0      Jim   1:33:04           93.0666671  Chrissy   0:06:39            6.6500002    Billy  10:00:02          600.033333

原理分析:

df[‘Time’].str.split(‘:’):将Time列中的每个时间字符串按冒号:分割,返回一个包含小时、分钟、秒的列表(例如[‘1′, ’33’, ’04’])。.apply(lambda x: …):对每个分割后的列表x应用一个匿名函数。int(x[0]) * 60:将小时部分(x[0])转换为整数并乘以60,得到小时对应的分钟数。int(x[1]):将分钟部分(x[1])转换为整数。int(x[2]) // 60 或 int(x[2]) / 60:将秒部分(x[2])转换为整数,然后使用整数除法//(向下取整)或浮点除法/(保留小数)转换为分钟。选择哪种除法取决于您对秒数精度(是否保留小数)的要求。

解决方案二:利用Pandas时间序列功能 (推荐)

对于时间数据处理,Pandas提供了强大的Timestamp和Timedelta对象,它们能够更健壮、更高效地处理时间相关的计算。将时间字符串转换为Timedelta对象是更专业和推荐的做法。

import pandas as pddf = pd.DataFrame({'Name': ["Jim", "Chrissy", "Billy"], 'Time': ['1:33:04', '0:06:39', '10:00:02']})# 将时间字符串转换为Timedelta对象df['Time_timedelta'] = pd.to_timedelta(df['Time'])# 提取总秒数并转换为总分钟数df['_timemin_timedelta'] = df['Time_timedelta'].dt.total_seconds() / 60print("n使用Timedelta转换的总分钟数:")print(df)

输出:

使用Timedelta转换的总分钟数:      Name      Time Time_timedelta  _timemin_timedelta0      Jim   1:33:04     0 days 01:33:04           93.0666671  Chrissy   0:06:39     0 days 00:06:39            6.6500002    Billy  10:00:02     0 days 10:00:02          600.033333

原理分析:

pd.to_timedelta(df[‘Time’]):这是最关键的一步。Pandas会自动解析’hh:mm:ss’格式的字符串,将其转换为Timedelta对象。Timedelta对象表示一个时间段,可以进行加减运算。.dt.total_seconds():Timedelta对象的.dt访问器提供了total_seconds()方法,可以直接获取该时间段的总秒数(浮点型)。/ 60:将总秒数除以60,即可得到总分钟数。

这种方法不仅代码更简洁,而且在处理更复杂的时间格式或需要进行时间段加减运算时,也更具通用性和鲁棒性。

注意事项

数据类型一致性: 确保时间列的数据类型是字符串,pd.to_timedelta能够很好地处理常见的字符串时间格式。错误处理: 如果时间字符串中存在不符合hh:mm:ss格式的数据,pd.to_timedelta在默认情况下会报错。可以通过设置errors=’coerce’参数来将无法解析的值转换为NaT(Not a Time),从而避免程序中断。

df_err = pd.DataFrame({'Time': ['1:33:04', 'invalid_time', '0:06:39']})df_err['Time_timedelta'] = pd.to_timedelta(df_err['Time'], errors='coerce')df_err['_timemin'] = df_err['Time_timedelta'].dt.total_seconds() / 60print("n处理无效时间数据:")print(df_err)

性能考量: 对于非常大的数据集,pd.to_timedelta通常比str.split().apply()结合lambda函数更高效,因为它在底层使用了优化的C/Cython代码。精度选择: 根据业务需求选择秒数是进行整数除法(// 60)还是浮点除法(/ 60),这决定了总分钟数是否包含小数部分。通常情况下,浮点分钟数更精确。

总结

本教程详细

以上就是Pandas中将’hh:mm:ss’时间格式转换为总分钟数的教程的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1366115.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月14日 04:59:45
下一篇 2025年12月14日 04:59:58

相关推荐

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

    本文旨在详细阐述如何在Pandas DataFrame中,高效且准确地将hh:mm:ss格式的时间字符串转换为以分钟为单位的数值。我们将探讨两种主要方法:一是使用字符串分割和Lambda函数进行手动计算,二是利用Pandas内置的to_timedelta函数进行更简洁、健壮的转换。文章将提供清晰的代…

    2025年12月14日
    000
  • Pandas中将hh:mm:ss时间字符串转换为总分钟数教程

    本教程详细介绍了如何在Pandas DataFrame中将hh:mm:ss格式的时间字符串高效转换为总分钟数。文章将从数据准备开始,逐步讲解使用str.split结合apply方法进行转换的两种方案,包括获取整数分钟和浮点分钟,并深入分析常见错误及其修正方法,旨在帮助用户准确处理时间数据类型转换。 …

    2025年12月14日
    000
  • Pandas中将hh:mm:ss时间格式转换为总分钟数的教程

    本教程详细介绍了如何在Pandas DataFrame中将hh:mm:ss格式的时间字符串转换为总分钟数。文章首先分析了常见的转换错误,随后提供了两种解决方案:一种是基于字符串分割和Lambda表达式的直接修正方法,支持获取整数或浮点分钟数;另一种是利用Pandas内置的pd.to_timedelt…

    2025年12月14日
    000
  • Python中如何识别未使用的变量和导入语句?

    识别python代码中未使用的变量和导入最直接有效的方法是使用静态代码分析工具。1. flake8是一个轻量级工具,结合pyflakes等组件,能快速识别未使用的导入(f401)和变量(f841);2. pylint则更为全面,除检测未使用代码外,还能分析代码风格、复杂度等,并提示w0611(未使用…

    2025年12月14日 好文分享
    000
  • Tkinter 库存系统条码生成与数据持久化优化指南

    本文旨在解决基于 Tkinter 的库存系统中,条码编号生成重复及数据存储逻辑不健壮的问题。通过深入分析全局变量、文件指针操作(a+ 模式)和重复性检查的常见误区,提供了一套包括动态编号生成、正确文件操作以及健壮重复性验证的优化方案。文章还将探讨使用结构化数据(如 JSON)替代纯文本文件,以提升数…

    2025年12月14日
    000
  • Python函数如何定义?从入门到精通指南

    python中定义函数的核心是使用def关键字,并可通过参数类型和作用域规则实现灵活的功能。1.定义函数需用def关键字后接函数名、括号及参数,最后以冒号结束,函数体需缩进;2.函数参数包括位置参数、关键字参数、默认参数和可变参数(args与*kwargs),分别用于不同场景的灵活传参;3.函数作用…

    2025年12月14日 好文分享
    000
  • 生成准确表达文章主题的标题 Pytest教程:为每个测试模块实现独立的登录会话

    本文介绍如何使用Pytest框架,结合fixture机制,为每个测试模块(例如不同的测试文件)实现独立的登录会话。通过定义一个class级别的fixture,并在每个测试类中使用它,可以在每个测试模块开始前执行登录操作,并在模块结束后执行登出操作,从而确保测试的独立性和可重复性。 在进行自动化测试时…

    2025年12月14日
    000
  • 使用 Pytest 和 Fixture 实现基于类的登录功能

    本文介绍了如何使用 Pytest 的 fixture 功能,在每个测试类执行前实现登录操作。通过定义一个 login fixture,并在测试类中使用 @pytest.mark.usefixtures(“login”) 装饰器,可以确保每个测试类在执行其测试用例之前都会执行登…

    2025年12月14日
    000
  • Pytest 中实现模块级或类级登录与注销管理

    本教程详细阐述了如何利用 Pytest 的 fixture 机制,实现在每个测试类(或模块)执行前自动进行登录操作,并在测试类结束后自动注销。通过配置 conftest.py 文件中的类级别 fixture,并结合 request 对象获取测试类属性,可以灵活管理不同测试场景下的登录凭据,确保测试环…

    2025年12月14日
    000
  • Python中多重异常处理的策略、变量作用域与最佳实践

    本文深入探讨了Python中处理多重异常的有效策略,重点分析了在try-except块中变量的作用域问题,并比较了多种异常处理模式。通过详细的代码示例,文章阐释了为何嵌套try-except块在处理不同阶段可能出现的异常时更为“Pythonic”,能够提供更清晰的错误隔离和更精确的变量状态控制,从而…

    2025年12月14日
    000
  • Python异常处理进阶:多异常捕获与变量作用域的最佳实践

    本文深入探讨Python中处理多重异常的策略,特别是当异常发生导致变量未定义时的作用域问题。通过分析常见误区并提供嵌套try-except块的解决方案,确保代码在处理数据获取和类型转换等依赖性操作时,能够清晰、安全地管理变量状态,从而提升程序的健壮性和可维护性。 理解多重异常与变量作用域挑战 在Py…

    2025年12月14日
    000
  • Python异常处理:多异常捕获与变量作用域的最佳实践

    本文探讨Python中处理多类型异常的有效方法,特别是当异常可能导致变量未定义时。我们将分析直接使用多个except子句的潜在问题,并阐述通过嵌套try-except块来确保变量作用域和程序健壮性的最佳实践。理解异常发生时变量的可见性是编写可靠Python代码的关键。 在Python编程中,我们经常…

    2025年12月14日
    000
  • Python中多异常处理的正确姿势与变量作用域解析

    本文探讨了Python中处理多重异常的有效策略,特别是当不同异常发生在代码执行的不同阶段时,如何正确管理变量作用域。通过分析一个常见的KeyError和ValueError场景,文章强调了在异常捕获链中变量可用性的重要性,并提供了嵌套try-except块的Pythonic解决方案,以确保代码的健壮…

    2025年12月14日
    000
  • Python中优雅处理多重异常与变量作用域的实践指南

    本文深入探讨了Python中处理多重异常时的常见陷阱与最佳实践,特别是涉及变量作用域的问题。通过分析一个典型的try-except结构,我们揭示了在不同异常分支中变量定义状态的重要性,并提出使用嵌套try-except块的有效解决方案。本教程旨在帮助开发者编写更健壮、更符合Pythonic风格的异常…

    2025年12月14日
    000
  • Python怎样实现自动化测试?pytest框架指南

    pytest是python中高效实现自动化测试的框架,适合各种规模项目和入门者。其语法比unittest更简洁,扩展性强,社区支持好。安装通过pip install pytest完成,并创建以test_开头的测试文件,如test_example.py写测试函数。运行时使用pytest命令执行测试。组…

    2025年12月14日 好文分享
    000
  • 使用 Flet 在 Python Banner 中动态显示文本的教程

    本文介绍了在使用 Flet 构建 Python 应用时,如何在 Banner 组件中动态显示不同的文本信息。通过示例代码,详细讲解了两种实现方案:直接在条件判断语句中创建 Banner 对象,以及使用 UserControl 类封装 Banner 组件。帮助开发者更灵活地控制 Banner 的显示内…

    2025年12月14日
    000
  • 配置VS Code以确保Python虚拟环境下的智能提示与自动补全功能正常工作

    本文旨在解决VS Code在Python虚拟环境下智能提示(IntelliSense)和自动补全功能失效的问题。许多开发者尝试通过配置launch.json文件来解决,但该文件主要用于调试配置。正确的解决方案是利用VS Code的用户或工作区settings.json文件,通过设置python.an…

    2025年12月14日
    000
  • VS Code中Python虚拟环境的智能感知与自动补全配置指南

    本文旨在解决VS Code在Python虚拟环境下智能感知和自动补全功能失效的问题,即代码运行正常但编辑器显示大量波浪线错误提示。核心解决方案在于理解launch.json和settings.json的区别,并重点指导用户如何正确选择Python解释器,以及在必要时通过settings.json配置…

    2025年12月14日
    000
  • 优化实时图像采集与处理系统的性能

    本文旨在提供一套优化实时图像采集与处理系统性能的教程。我们将深入探讨如何通过重构代码结构、采用并发编程模型(如线程池和生产者-消费者模式)来解决实时数据处理中的性能瓶颈和数据一致性问题。此外,还将讨论GUI更新的线程安全以及其他潜在的优化策略,帮助开发者构建高效、稳定的实时数据处理应用。 在物理实验…

    2025年12月14日
    000
  • Python如何实现自动化测试?Selenium与Pytest结合指南

    python实现自动化测试的核心方案是结合selenium和pytest。1. 首先,安装python及相关库(selenium、pytest)并配置浏览器驱动;2. 接着,编写测试脚本,使用selenium模拟用户操作,通过pytest管理测试流程及断言;3. 然后,采用page object m…

    2025年12月14日 好文分享
    000

发表回复

登录后才能评论
关注微信