当前位置:

首页 > 编程开发 > Python中的Pandas时间函数time、datetime模块怎么使用

Python中的Pandas时间函数time、datetime模块怎么使用

Python中提供了对时间日期的多种多样的处理方式,主要是在time和datetime这两个模块里。一、time模块time模块不牵扯时区的问题,便于计算。(1)timestamp时间戳,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。(2)struct_time时间元组,共有九个元素组。(3)formattime格式化时间,已格式化的结构使时间更具可读性。包括自定义格式和固定格式。1、时间格式转换图主要time生成方法和time格式转换方法实例如下:首先,我们导入time模块,便

    Python 中提供了对时间日期的多种多样的处理方式,主要是在 time 和 datetime 这两个模块里。

    一、time 模块

    • time 模块不牵扯时区的问题,便于计算。

    • (1) timestamp 时间戳,时间戳表示的是从 1970 年 1 月 1 日 00:00:00 开始按秒计算的偏移量。

    • (2) struct_time 时间元组,共有九个元素组。

    • (3) format time 格式化时间,已格式化的结构使时间更具可读性。包括自定义格式和固定格式。

    1、时间格式转换图

    Python中的Pandas时间函数time、datetime模块怎么使用

    • 主要 time 生成方法和 time 格式转换方法实例如下:

    • 首先,我们导入 time 模块,便于我们后续的操作。

    import time

    然后,我们生成 timestamp ,他是一个浮点型数据。

    time.time()
    #1676978808.2162082

    将其转化为整型数据。

    int(time.time())
    #1676978809

    我们可以知道一个程序消耗的时间,通过设置程序开始时间和程序结束时间,中间执行一个循环语句,这里以累加到 10000 为例。

    start_time = time.time() 
    s = "" 
    for i in range(10000):     
    s += str(i)  
    end_time = time.time()  
    print("程序消耗时间=",end_time-start_time) 
    #程序消耗时间= 0.0039615631103515625

    我们也可以通过 time 模块调用本地时间,通过生成 struct_time 完成。

    my_time = time.localtime() 
    print(my_time)  
    print(my_time.tm_year) 
    print(my_time.tm_mon) 
    print(my_time.tm_mday) 
    #time.struct_time(tm_year=2023, tm_mon=2, tm_mday=21, tm_hour=19, tm_min=26, tm_sec=58, #tm_wday=1, tm_yday=52, tm_isdst=0) 
    #2023 
    #2 
    #21

    我们可以将 timsstamp 转化为 struct_time。

    time.localtime(1650177058) 
    #time.struct_time(tm_year=2022, tm_mon=4, tm_mday=17, tm_hour=14, tm_min=30, tm_sec=58, #tm_wday=6, tm_yday=107, tm_isdst=0)

    可以将格式化字符串输入到 struct_time。

    time.strptime('2011-05-05 16:37:06', '%Y-%m-%d %X') 
    #time.struct_time(tm_year=2011, tm_mon=5, tm_mday=5, tm_hour=16, tm_min=37, tm_sec=6, #tm_wday=3, tm_yday=125, tm_isdst=-1)

    我们也可以将格式化字符串时间反向转变为秒钟数。

    time.mktime(time.strptime('2011-05-05 16:37:06', '%Y-%m-%d %X')) 
    #1304584626.0
    • 我们可以生成 format_time,产生满足我们格式要求的时间。

    • 示例 1:

    #struct_time to format_time time.strftime("%Y-%m-%d %X") 
    time.strftime("%Y-%m-%d %X",time.localtime()) 
    #time.strftime("%Y-%m-%d %X",time.localtime())
    #'2023-02-21 19:27:05' #生成format_time

    示例 2:

    #struct_time to format_time 
    time.strftime("%Y-%m-%d") 
    #time.strftime("%Y-%m-%d %X",time.localtime())
    #'2023-02-21'

    示例 3:

    #struct_time to format_time 
    time.strftime("%m-%d-%Y") 
    #time.strftime("%Y-%m-%d %X",time.localtime())
    #'02-21-2023'

    2. struct_time 元组元素结构

    其具体元素结构可见下述表格。

    属性
    tm_year(年)xxxx 年,比如 2011
    tm_mon(月)1 - 12
    tm_mday(日)1 - 31
    tm_hour(时)0 - 23
    tm_min(分)0 - 59
    tm_sec(秒)0 - 61
    tm_wday(weekday)0 - 6(0表示周日)
    tm_yday(一年中的第几天)1 - 366
    tm_isdst(是否是夏令时)默认为-1
    • 其具体如下作用:

    • (1) 取得时间戳/时间格式的字符串中对应的年/月/日等信息。

    • (2) 作为时间戳和字符串时间之间的桥梁。

    • 具体可见如下示例:

    time_stuct = time.strptime('2011-05-07 16:37:06', '%Y-%m-%d %X') 
    print(time_stuct.tm_year) 
    print(time_stuct.tm_mon) 
    print(time_stuct.tm_mday) 
    print(time_stuct.tm_hour) 
    print(time_stuct.tm_min) 
    my = 'aaa' 
    '%s'% my 
    my_int = 1 
    '%d'% my_int  
    "我们在{}工作".format('家里') 
    addr = "家里"  
    f"我们在{addr}工作"
    #2011 
    #5 
    #7 
    #16 
    #37 
    #'我们在家里工作'

    3. format time 结构化表示

    其具体含义可见下述表格。

    属性含义
    %Y -年[0001,…,2018,2019,…,9999]
    %m -月[01,02,…,11,12]
    %d -天[01,02,…,30,31]
    %M -分钟[00,01,…,58,59]
    %S -秒[00,01,…,58,61]
    %X本地相应时间
    %y去掉世纪的年份(00 - 99)
    • 常见的结构化时间组合有如下几种:

    • 示例 1:

    time.strftime("%Y-%m-%d %X")
    #'2023-02-21 20:55:40'
    
    time.strftime("%Y-%m-%d %X")
    #'2023-02-21 20:55:40'

    示例 2:

    time.strftime("%Y-%m-%d")
    #'2023-02-21'

    示例 3:

    time.strftime("%m")
    #'02'

    我们可以通过 time 运算获取我们想要的时间点,并按 %Y-%m-%d %X 的形式表达出来。

    import time 
    t1 = time.time() 
    t2=t1+24*60*60  
    time.strftime("%Y-%m-%d %X",time.localtime(t2))
    #'2023-02-22 21:02:38'

    或者通过 time 进行暂停操作,例如火箭发射,我们在循环结束后暂停 1s,然后进行下一个语句。

    # 倒计时 
    for i in range(5):
         print('\r',' %s 秒!' % (5-i), end='')
         # 暂停1s后运行     
         time.sleep(1) 
    print('\r',"发射!!!!")
    #发射!!!!

    二、datetime 模块

    datatime 模块重新封装了time模块,提供更多接口,提供的类有:date,time,datetime、timedelta,tzinfo 等。

    1. date类

    其语法模板如下:

    datetime.date(year, month, day)
    • 有静态方法和字段两种方法。

    • date.today():返回一个表示当前本地日期的date对象。

    • date.fromtimestamp(timestamp):根据给定的时间戮,返回一个date对象。

    • 具体可见如下示例:

    • 示例 1:

    from datetime import date 
    import time 
    print('date.today():', date.today()) 
    print('date.fromtimestamp():', date.fromtimestamp(time.time()))
    #date.today(): 2023-02-21 
    #date.fromtimestamp(): 2023-02-21

    示例 2:

    from datetime import date 
    print(type(date.fromtimestamp(1650177058))) 
    print(date.fromtimestamp(1650177058))
    # 
    #2022-04-17

    2. 方法和属性

    • 可以通过 d1 = date(2011,06,03) 生成 date 对象 。

    • 其具体含义可见下述表格。

    属性含义
    d1.year
    d1.month
    d.day
    d1.replace(year, month, day)生成一个新的日期对象,用参数指定的年,月,日代替原有对象中的属性。(原有对象仍保持不变)
    d1.timetuple()返回日期对应的time.struct_time对象
    d1.weekday()返回weekday,如果是星期一,返回0;如果是星期2,返回1,以此类推
    d1.isoweekday()返回weekday,如果是星期一,返回1;如果是星期2,返回2,以此类推
    d1.isoformat()返回格式如’YYYY-MM-DD’的字符串
    d1.strftime(fmt)和 time 模块 forma t相同
    • 具体可见如下示例:

    • 示例 1:我们将 day 参数指定为 1。

    now = date.today() 
    now 
    print(now.replace(day=1))
    #2023-02-01

    示例 2:同示例 1,但是换了一种函数写法。

    date.today().replace(day=1)
    #datetime.date(2023, 2, 1)

    示例 3:直接使用 now 函数生成当前日期。

    now 
    #datetime.date(2023, 2, 21)

    示例 4:直接使用 now.isoformat() 函数生成 YYYY-MM-DD 格式的当前日期。

    now.isoformat() 
    #'2023-02-21'

    示例 5:直接使用 now.isoweekday() 函数生成周几,返回对应的数字。

    now.isoweekday() 
    #2

    示例 6:使用 now.strftime() 函数自定义输出格式。

    #'2022.04.18'  自定义输出格式 
    now.strftime('%Y.%m.%d') 
    #'2023.02.21'

    示例 7:

    now = date(2021, 10, 26) 
    print(now.year,now.month,now.day) 
    tomorrow = now.replace(day = 1) 
    print('now:', now, ', 当月第一天:', tomorrow) 
    print('timetuple():', now.timetuple())  
    print('weekday():', now.weekday()) 
    print('isoweekday():', now.isoweekday()) 
    print('isoformat():', now.isoformat()) 
    print('strftime():', now.strftime("%Y.%m.%d")) 
    #2021 10 26 
    #now: 2021-10-26 , 当月第一天: 2021-10-01 
    #timetuple(): time.struct_time(tm_year=2021, tm_mon=10, tm_mday=26, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=299, tm_isdst=-1) 
    #weekday(): 1 
    #isoweekday(): 2 
    #isoformat(): 2021-10-26 
    #strftime(): 2021.10.26

    3. datetime 类

    • datetime 相当于 date 和 time 结合起来。

    • 其语法模板如下:

    datetime.datetime (year, month, day[ , hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] ] )
    • datetime.today():返回一个表示当前本地时间的 datetime 对象。

    • datetime.now([tz]):返回一个表示当前本地时间的 datetime 对象,如果提供了参数 tz,则获取 tz 参数所指时区的本地时间。

    • datetime.fromtimestamp(timestamp[, tz]):根据时间戮创建一个 datetime 对象,参数 tz 指定时区信息。

    • datetime.strptime(date_string, format):将格式字符串转换为 datetime 对象。

    • 我们可以将 datetime 转化为指定格式的字符串。

    from  datetime import datetime 
    now = datetime.now() 
    print(type(now))
    print(now.strftime('%Y-%m-%d %X'))
    print(now.strftime('%Y-%m-%d %H:%M'))
    # 
    #2023-02-21 21:45:25 
    #2023-02-21 21:45
    • 对于 2021-11-25 10:23 这类的字符串,我们可以使用 strptime 将其转化为 datetime。

    • 需要注意的是,将字符串转化为 datetime 数据类型,格式需要统一。

    my_str = '2021-11-10 10:23' 
    print(datetime.strptime(my_str,'%Y-%m-%d %H:%M'))
    my_str = '10/11/2021 10:23' 
    datetime.strptime(my_str,'%d/%m/%Y %H:%M')
    #2021-11-10 10:23:00 
    #datetime.datetime(2021, 11, 10, 10, 23)

    汇总一下,见下方例子。

    from  datetime import * 
    import time 
    now = datetime.now() 
    print('today():', datetime.today()) 
    print('now():', datetime.now()) 
    print('fromtimestamp(tmstmp):', datetime.fromtimestamp(time.time()))    
    print('datetime.strptime(date_string, format):',datetime.strptime('2022-03-21', "%Y-%m-%d"))  
    #today(): 2023-02-21 21:45:28.141748 
    #now(): 2023-02-21 21:45:28.141748 
    #fromtimestamp(tmstmp): 2023-02-21 21:45:28.141748 
    #datetime.strptime(date_string, format): 2022-03-21 00:00:00

    三、timedelta 类的时间加减

    • 使用 timedelta 可以很方便的在日期上做天 days,小时 hour,分钟 minute,秒 second,毫秒 millisecond,微秒 microsecond 的时间计算,如果要计算月份则需要另外的办法。

    • 具体可见如下示例。

    • 示例 1(加上 -1 和减 1 是相同的):

    from  datetime import datetime 
    from  datetime import timedelta 
    dt = datetime.now() 
    #日期减一天 
    dt_1 = dt + timedelta(days=-1)   #昨天  
    dt_11 = dt - timedelta(days=1)   #昨天  
    dt3 = dt + timedelta(days=1)   #明天  
    print("dt3:",dt_1)  
    print("dt_11:",dt_11)  
    print("dt3:",dt3)
    #dt3: 2023-02-20 22:11:28.388926 
    #dt_11: 2023-02-20 22:11:28.388926 
    #dt3: 2023-02-22 22:11:28.388926

    示例 2(可以使用 s.total_seconds 返回在该时间实例的给定持续时间内覆盖的总秒数 ):

    # 明天的datetime  - 昨天的datetime 
    s= dt3 - dt_1 
    print(s.days) 
    print(s.total_seconds())
    #2 
    #172800.0

    示例 3:

    delta_obj = dt3-dt 
    print(type(delta_obj),delta_obj)# 1 day, 0:00:00 
    # total_seconds():返回在该时间实例的给定持续时间内覆盖的总秒数 
    print(delta_obj.days ,delta_obj.total_seconds())#1 86400.0
    # 1 day, 0:00:00 
    #1 86400.0

    四、时间处理基础

    • Pandas 提供了四种类型的生成日期时间的对象:日期时间、时间增量、时间跨度、日期偏移量。

    • (1) 日期时间(Date Times):具有时区支持的特定日期和时间。与 Python 标准库中的 datetime.datetime 类似。如 2020 年 12 月 6 日 13 点 37 分 50 秒.

    • (2) 时间增量(Time Deltas):绝对持续时间,用于在指定时间点基础上增加指定的增量,如在某年月日的基础上增加 2 天、增加 2 个月、减少 4 小时等,最后产生一个新的时间点。

    • (3) 时间跨度(Time Span):由时间点及其相关周期定义的时间跨度,如连续产生一年四个季度的时间序列。

    • (4) 日期偏移(Date Offsets):以日历计算的相对持续时间,表示时间间隔,两个时间点之间的长度,如日、周、月、季度、年。

    概念标量类数组类Pandas 数据类型主要建立方法
    日期时间(Date Times)Timesstamp 时间戳DatetimeIndex 时间索引datetime64[ns]、datetime64[ns,tz]to datetime()、date_range()
    时间增量(Time Deltas)Timedelta 时间增量Timedeltalndex 时间增量索引timedelta[ns]to timedelta()、timedelta range()
    时间跨度(Time Span&#x#xff09;Period 时间周期PeriodIndex 周期索引period[freq]Period()、period_range()
    日期偏移(Date Offsets)DateOffsetNoneNoneDateOffset()
    • 一般情况下,时间序列主要是 Series 或 DataFrame 的时间型索引,可以用时间元素进行操控。

    本文内容来源于互联网,如有侵权请联系删除。
    作者最新文章
    编程开发 Python
    相关文章 更多
    Python安装后怎么打开:使用IDLE或命令行启动解释器
    Python安装后怎么打开:使用IDLE或命令行启动解释器

    刚在Windows安装好Python却不知道如何启动?本文详细演示如何通过开始菜单找到并打开IDLE集成开发环境,以及如何在PowerShell或命令提示符中使用python和py命令启动交互式解释器、运行.py脚本文件。包含退出解释器的方法及常见启动问题排查,帮助初学者快速验证安装成功并开始编写代码。

    Windows系统Python安装教程:下载、勾选PATH及环境变量配置
    Windows系统Python安装教程:下载、勾选PATH及环境变量配置

    针对Windows初学者的Python安装实战指南。详细讲解如何从Python官网下载匹配架构的安装包,重点演示安装首屏勾选“Add python.exe to PATH”的关键操作,并提供使用python --version和py命令验证环境变量的具体步骤,帮助新手快速搭建开发环境并排查路径问题。

    麒麟OS如何查看Python进程的运行状态
    麒麟OS如何查看Python进程的运行状态

    要想确认麒麟OS中Python程序的运行状态以及资源占用情况,我们可以这样做:用ps -ef | grep python来筛选进程;通过top命令,按P键排序查看实时负载;使用pgrep -f "script.py"精准获取PID;借助lsof -p PID验证文件打开状态。另外,还可以结合syst

    Python在Debian上如何配置SSL证书
    Python在Debian上如何配置SSL证书

    在Debian系统上配置SSL证书通常涉及以下几个步骤:安装Web服务器:首先,你需要一个Web服务器,比如Apache或Nginx。这里以Apache为例。sudo apt updatesudo apt install apache2获取SSL证书:你可以从Let’s Encrypt免费获取SSL

    统信UOS怎么安装Python开发环境
    统信UOS怎么安装Python开发环境

    要想让Python项目在统信UOS上正常运行,得先安装python3、python3-pip、python3-venv、python3-dev以及build-essential等组件。具体操作就是执行sudo apt install命令来一步到位完成安装,同时别忘了配置清华镜像源来给pip加速哦。在

    纯Python方案实现中英文全文搜索
    纯Python方案实现中英文全文搜索

    在互联网上的各类网站中,无论大小,基本上都会有一个搜索框,用来给用户对内容进行搜索,小到站点搜索,大到搜索引擎搜索。从简单的来说,搜索功能确实很简单,一个简单的select语句就可以实现数据的搜索。而从复杂的来看,无论是搜索的精度还是搜索的效率,都是有很深的研究范围的。对于简单的搜索功能来说,一个s

    Mac如何取消通过Python脚本运行的关机程序
    Mac如何取消通过Python脚本运行的关机程序

    立即在终端输入sudo shutdown -c取消倒计时关机,成功后显示“Shutdown cancelled”;若存在pmset重复任务,需再执行sudo pmset repeat cancel清除。Mac因Python脚本执行了os.system("sudo shutdown -h +10")或

    Pythonasyncio异步并发与多固定出口IP调度实战
    Pythonasyncio异步并发与多固定出口IP调度实战

    之前写过一篇同步场景下用 Python 管理多个固定出口 IP 的实践(ExitPool + requests/httpx),覆盖了健康检查、故障转移和连接池复用。但在实际业务中,越来越多的场景用 asyncio 做高并发采集或批量接口调用——异步事件循环下多出口的管理方式和同步场景完全不同:单线程

    Python在静态出口IP产品中的实战:从地址漂移巡检到多IP故障切换
    Python在静态出口IP产品中的实战:从地址漂移巡检到多IP故障切换

    写在前面:为什么静态出口 IP 不是"买了就行"不少团队在引入静态出口 IP 产品时,第一反应往往是:“地址配上去,这事就算完了。”可真到了真实业务里,静态出口 IP 真正能体现价值的地方,往往不在分配这一步,而在分配之后怎么管:地址有没有漂移,质量是否达标,某一条线路突然不可用时怎么切换,连接层又

    using namespace 使用中遇到的问题怎么解决
    using namespace 使用中遇到的问题怎么解决

    命名空间的基本概念与常见引入问题在C++等编程语言中,命名空间(namespace)是一种将代码标识符(如变量、函数、类名)封装在特定名称下的机制,其主要目的是避免命名冲突,尤其是在大型项目或使用多个第三方库时。使用“using namespace”指令可以将指定命名空间中的所有名称引入当前作用域,

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    macOS软件
    macOS软件

    正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

    Mac软件 更多
    灵活计算器
    灵活计算器
    macOS/iOS/Android

    灵活计算器是一款笔记式算数应用,支持实时计算、动态关联和云端同步功能。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

    赤友清理大师
    赤友清理大师
    macOS

    赤友清理大师是一款为 Mac 设计的智能清理优化工具,可精准扫描垃圾、大文件、重复文件等,释放磁盘空间。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

    极度公式
    极度公式
    Windows/macOS/Linux

    极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

    WINDOWS 更多
    Windows 10
    Windows 10
    Windows

    Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。

    极度公式
    极度公式
    Windows/macOS/Linux

    极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

    密码键盘
    密码键盘
    Windows/macOS/iOS/Android

    密码键盘是一款兼具安全性与便捷性的高效密码管理器。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。