将时间四舍五入到最接近的20分钟间隔

将时间四舍五入到最接近的20分钟间隔

本文介绍了如何使用Python将时间四舍五入到最接近的20分钟间隔。通过自定义函数`round_dt`,可以灵活地实现时间的向上或向下调整,使其符合20分钟的间隔要求。此外,本文还展示了如何将此函数应用于Pandas DataFrame中的时间列,以便批量处理时间数据。

Python时间四舍五入到指定间隔

在数据处理中,经常需要将时间数据进行规整,例如将时间四舍五入到最接近的指定间隔。本文将介绍如何使用Python的datetime模块实现将时间四舍五入到最接近的20分钟间隔,并将其应用于Pandas DataFrame。

自定义时间四舍五入函数

首先,我们需要定义一个函数,该函数接受一个datetime对象和一个timedelta对象作为输入,并将datetime对象四舍五入到最接近的timedelta间隔。

from datetime import datetime, timedeltadef round_dt(dt, delta):    increase = (datetime.min - dt) % delta    if increase < delta / 2:        return dt + increase    else:        return dt + increase - delta# 示例now = datetime(2023, 2, 24, 12, 21, 00)print(now)    print(round_dt(now, timedelta(minutes=20)))

在上述代码中,round_dt函数首先计算dt距离上一个delta间隔的差值increase。如果increase小于delta的一半,则将dt向上调整increase,否则将dt向下调整delta – increase。

将函数应用于Pandas DataFrame

接下来,我们将展示如何将round_dt函数应用于Pandas DataFrame中的时间列。

import pandas as pdfrom functools import partialdata = pd.DataFrame({'Experiment_ID': [52.0, 52.1, 52.2, 55.0, 55.1, 55.2, 56.0, 56.1, 56.2, 56.3, 56.4,                 57.0, 57.1, 57.2, 59.0, 59.1, 60.0, 61.0, 62.0, 62.1, 62.2, 63.0,                 63.1, 64.0, 64.1, 64.2, 65.0, 65.1, 65.2, 66.0],'Datetime': ['2023-02-24 11:34:00', '2023-02-24 12:37:00', '2023-02-24 13:36:00', '2023-03-08 11:13:00',               '2023-03-08 12:18:00', '2023-03-08 13:18:00', '2023-03-16 10:03:00', '2023-03-16 11:03:00',               '2023-03-16 11:40:00', '2023-03-16 12:06:00', '2023-03-16 13:04:00', '2023-03-22 10:56:00',               '2023-03-22 12:05:00', '2023-03-22 13:09:00', '2023-04-05 11:25:00', '2023-04-05 12:35:00',               '2023-04-07 12:50:00', '2023-04-11 15:00:00', '2023-04-13 10:47:00', '2023-04-13 11:47:00',               '2023-04-13 12:47:00', '2023-04-19 10:45:00', '2023-04-19 13:00:00', '2023-04-20 10:36:00',               '2023-04-20 11:33:00', '2023-04-20 12:35:00', '2023-04-26 10:53:00', '2023-04-26 12:01:00',               '2023-04-26 12:30:00', '2023-05-11 10:22:00']})# 将'Datetime'列转换为datetime对象data['Datetime'] = pd.to_datetime(data['Datetime'])# 使用functools.partial预先绑定delta参数round_to_20min = partial(round_dt, delta=timedelta(minutes=20))# 将round_dt函数应用于'Datetime'列data['Datetime_Rounded'] = data['Datetime'].apply(round_to_20min)print(data)

在上述代码中,我们首先使用pd.to_datetime函数将DataFrame中的’Datetime’列转换为datetime对象。然后,我们使用functools.partial函数预先绑定round_dt函数的delta参数,创建一个新的函数round_to_20min,该函数只接受一个datetime对象作为输入。最后,我们使用apply函数将round_to_20min函数应用于’Datetime’列,并将结果存储在新的’Datetime_Rounded’列中。

总结

本文介绍了如何使用Python将时间四舍五入到最接近的20分钟间隔。通过自定义函数round_dt,可以灵活地实现时间的向上或向下调整,使其符合20分钟的间隔要求。此外,本文还展示了如何将此函数应用于Pandas DataFrame中的时间列,以便批量处理时间数据。使用functools.partial可以简化代码,提高可读性。

以上就是将时间四舍五入到最接近的20分钟间隔的详细内容,更多请关注创想鸟其它相关文章!

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月14日 18:14:38
下一篇 2025年12月14日 18:14:54

相关推荐

  • Pythonic 的实现方式:属性查询与子类化

    本文探讨了在Python中,如何优雅地处理不同类型的输入参数,并提供统一的处理方式。通过将输入参数规范化为标准数据类型,可以避免在函数内部进行多次类型检查,从而提高代码的可读性和可维护性。文章将对比子类化和属性查询两种方法,并推荐一种更符合Pythonic风格的实现方式。 在编写Python代码时,…

    好文分享 2025年12月14日
    000
  • Pandas日期索引数据处理:高效提取与条件填充NaN

    在数据分析工作中,我们经常需要从时间序列数据中提取特定日期的数据点,并对其他日期的数据进行特殊处理,例如填充为nan。虽然python的for循环可以实现这一目的,但在处理大型数据集时,其性能瓶颈会非常明显。更重要的是,不正确的循环赋值方式可能导致意料之外的结果。 理解问题:迭代赋值的局限性与常见错…

    2025年12月14日
    000
  • 使用 Python 从 JSON 文件中删除特定字典

    本文介绍了如何使用 Python 从 JSON 文件中删除满足特定条件的字典。通过读取 JSON 文件,遍历其中的字典,并根据日期计算天数差,当差值为 0 时,从列表中删除对应的字典,并将修改后的数据写回 JSON 文件。 本教程将详细讲解如何使用 Python 从 JSON 文件中删除满足特定条件…

    2025年12月14日
    000
  • Python嵌套列表填充:一种灵活的解决方案

    本文旨在提供一种在Python中填充嵌套列表的实用方法,特别是针对不规则结构的列表。我们将演示如何通过循环和列表推导式,在嵌套列表的特定层级添加指定元素,使其达到预期的长度和形状。 核心在于理解列表的层级结构,并利用Python的列表操作技巧进行填充。 在处理数据时,经常会遇到需要处理嵌套列表的情况…

    2025年12月14日
    000
  • 解决人脸识别考勤系统重复记录问题:一份详细教程

    本文旨在解决基于 OpenCV 和 face_recognition 库构建的人脸识别考勤系统中,重复记录考勤信息的问题。通过分析代码逻辑和文件读写操作,提供两种优化方案,确保考勤记录的准确性和效率。针对初学者,本文提供详细的代码示例和解释,帮助读者理解并解决实际问题。 在人脸识别考勤系统中,一个常…

    2025年12月14日
    000
  • Pythonic 编程:属性查询 vs. 子类化,标准化输入更胜一筹

    本文探讨了在 Python 中处理不同类型输入时,属性查询和子类化两种设计模式的优劣。通过一个衰减 epsilon 的示例,展示了将输入标准化为统一类型,再进行后续操作的 Pythonic 方式,从而提高代码的可读性、可维护性和灵活性。 在 Python 编程中,经常会遇到需要处理不同类型输入的情况…

    2025年12月14日
    000
  • Pygame中绘制动态矢量箭头的技巧与常见陷阱

    本文旨在指导读者如何在pygame中绘制具有方向指示的动态矢量箭头。我们将详细探讨箭头的几何学原理,即如何通过向量方向计算出箭头的三点坐标,并纠正代码中常见的两个问题:函数调用遗漏括号和不健壮的角度计算方法。通过本文,您将掌握使用`math.atan2`实现精确角度计算,并构建一个可复用的箭头绘制函…

    2025年12月14日
    000
  • Python教程:高效计算文本文件中指定列的最后N个值之和与平均值

    本教程详细讲解如何使用python从结构化文本文件中提取特定数据。我们将学习如何读取文件内容、利用列表切片获取末尾n行,并对这些行的指定列(如数值列)进行求和与平均值计算,提供简洁高效的代码示例和专业指导,以解决常见的数据处理需求。 引言 在数据分析和日志处理的日常工作中,我们经常需要处理结构化的文…

    2025年12月14日
    000
  • Python中高效且简洁的列表初始化方法

    本文深入探讨了python中列表的初始化策略,针对固定值填充和动态生成元素两种常见场景,提供了简洁高效的pythonic解决方案。对于固定值初始化,推荐使用列表重复操作符;对于动态初始化,则建议结合`map()`函数和`range()`,并可封装为辅助函数,以提升代码可读性并遵循单一职责原则。 在P…

    2025年12月14日
    000
  • Python 实现列表的特殊排序:单元素列表置于两端,双元素列表按首元素排序

    本文介绍了如何使用 Python 对一个包含单元素和双元素列表的列表进行特殊排序。目标是将单元素列表置于列表的两端,并按照其包含的数字大小排序,而双元素列表则位于单元素列表之间,并按照其首个元素的数字大小进行排序。本文提供了两种基于正则表达式的解决方案,并解释了其原理和适用场景。 在实际编程中,我们…

    2025年12月14日
    000
  • 解决Alembic初始化迁移中外键引用问题的教程

    本文深入探讨了在使用alembic进行sqlalchemy模型迁移时,常见的`noreferencedtableerror`和`duplicate table keys`错误。核心解决方案在于统一管理`declarativebase`,确保所有模型共享同一个`base`实例,并正确配置`env.py…

    2025年12月14日
    000
  • 替换HTML标签内反斜杠为正斜杠的Python脚本教程

    本文将介绍如何使用Python脚本定位并替换HTML标签内(特指错误拼写的标签,例如“)的反斜杠为正斜杠。该脚本使用正则表达式精准匹配目标反斜杠,避免误替换,从而保证HTML结构的正确性。本文将提供详细的代码示例和解释,帮助读者理解和应用该技术。 在处理HTML文档时,有时会遇到一些不规…

    2025年12月14日
    000
  • Kivy按钮事件绑定到Python对象方法的实现指南

    本教程详细讲解如何在kivy应用中实现自定义python对象(如“cell”类)创建kivy按钮,并使其点击事件能够正确调用创建该按钮的python对象内部方法。核心在于确保事件绑定操作发生在将被渲染和交互的按钮实例上,避免因创建新实例而导致绑定失效的问题。 引言:Kivy事件与Python对象交互…

    2025年12月14日
    000
  • API响应头中特定Cookie值的提取与后续请求应用

    本文详细阐述了如何从api响应头中精确提取特定cookie值(如`tt-target-idc-sign`),并将其应用于后续的api请求中。通过解析`set-cookie`头部的结构,结合python字符串处理技巧,实现动态参数的捕获与重用,确保api自动化和测试流程的顺畅与高效。 在进行API自动…

    2025年12月14日
    000
  • Python Logging:每天生成不同的日志文件

    本文旨在解决Python `logging` 模块中如何实现每天生成一个独立的日志文件的问题。通过修改 `FileHandler` 的 `baseFilename` 属性并关闭旧文件,以及使用 `TimedRotatingFileHandler`,可以轻松实现日志文件的按天轮转。 在Python开发…

    2025年12月14日
    000
  • 解决Alembic初始迁移中外键引用表未找到的错误

    本教程旨在解决使用alembic进行数据库迁移时,因外键引用表未找到(`noreferencedtableerror`)及后续可能出现的元数据重复问题。核心解决方案在于统一管理`sqlalchemy declarativebase`实例,并确保alembic的`target_metadata`正确配…

    2025年12月14日
    000
  • Python继承的原理分析

    Python继承通过MRO确定方法查找顺序,使用super()按MRO动态调用父类方法,属性查找沿实例、类、继承链向上搜索,实现代码复用与协作式调用。 Python中的继承机制是面向对象编程的重要组成部分,它允许一个类(子类)获得另一个类(父类)的属性和方法。理解其底层原理有助于写出更清晰、可维护的…

    2025年12月14日
    000
  • 从Python列表中交替提取最大值和最小值及其索引

    本文旨在介绍如何从一个Python列表中交替提取最大值和最小值,并获取它们对应的索引。我们将探讨两种基于`itertools`库的解决方案,通过分组和累积计算,高效地实现这一目标,并提供详细的代码示例和解释,帮助读者理解和应用这些技巧。 在处理数据时,有时需要从列表中提取特定模式的值。一个常见的需求…

    2025年12月14日
    000
  • Python import 语句的智能重构:基于 AST 实现精细化管理

    本文详细阐述如何利用 python 的抽象语法树(ast)将源代码中的 `import module` 语句智能重构为 `from module import name1, name2, …` 形式,并相应地修改模块属性的调用方式。通过解析代码、识别模块属性使用情况,并使用 `ast.n…

    2025年12月14日
    000
  • Python列表:查找交替的最大值和最小值及其索引

    本文介绍了如何在Python列表中查找交替出现的最大值和最小值,并获取它们对应的索引。通过使用`itertools.groupby`和`accumulate`等工具,我们可以高效地提取出列表中符合特定模式的元素及其位置信息,并提供了两种实现方法,帮助读者理解和应用。 在处理Python列表时,有时我…

    2025年12月14日
    000

发表回复

登录后才能评论
关注微信