Python中的Pandas时间函数time、datetime模块怎么使用
本篇文章给大家分享《Python中的Pandas时间函数time、datetime模块怎么使用》,覆盖了文章的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。
Python 中提供了对时间日期的多种多样的处理方式,主要是在 time 和 datetime 这两个模块里。
一、time 模块
time 模块不牵扯时区的问题,便于计算。
(1) timestamp 时间戳,时间戳表示的是从 1970 年 1 月 1 日 00:00:00 开始按秒计算的偏移量。
(2) struct_time 时间元组,共有九个元素组。
(3) format time 格式化时间,已格式化的结构使时间更具可读性。包括自定义格式和固定格式。
1、时间格式转换图

主要 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)) #<class 'datetime.date'> #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.263. 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'))
#<class 'datetime.datetime'>
#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)#<type 'datetime.timedelta'> 1 day, 0:00:00 # total_seconds():返回在该时间实例的给定持续时间内覆盖的总秒数 print(delta_obj.days ,delta_obj.total_seconds())#1 86400.0 #<class 'datetime.timedelta'> 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#xff09; | Period 时间周期 | PeriodIndex 周期索引 | period[freq] | Period()、period_range() |
| 日期偏移(Date Offsets) | DateOffset | None | None | DateOffset() |
一般情况下,时间序列主要是
Series或DataFrame的时间型索引,可以用时间元素进行操控。
今天带大家了解了的相关知识,希望对你有所帮助;关于文章的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~
格力电器发布 2023 年年报及 2024 年一季报:营收同比增长分别超 7%、2%
- 上一篇
- 格力电器发布 2023 年年报及 2024 年一季报:营收同比增长分别超 7%、2%
- 下一篇
- PHP 内容缓存与优化策略
-
- 文章 · python教程 | 3小时前 |
- Python如何重命名数据列名?columns教程
- 165浏览 收藏
-
- 文章 · python教程 | 4小时前 |
- 异步Python机器人如何非阻塞运行?
- 216浏览 收藏
-
- 文章 · python教程 | 4小时前 |
- Python排序忽略大小写技巧详解
- 325浏览 收藏
-
- 文章 · python教程 | 4小时前 |
- Python列表引用与复制技巧
- 300浏览 收藏
-
- 文章 · python教程 | 5小时前 | 数据处理 流处理 PythonAPI PyFlink ApacheFlink
- PyFlink是什么?Python与Flink结合解析
- 385浏览 收藏
-
- 文章 · python教程 | 5小时前 | sdk 邮件API requests库 smtplib Python邮件发送
- Python发送邮件API调用方法详解
- 165浏览 收藏
-
- 文章 · python教程 | 6小时前 |
- Pandasmerge_asof快速匹配最近时间数据
- 254浏览 收藏
-
- 文章 · python教程 | 6小时前 |
- 列表推导式与生成器表达式区别解析
- 427浏览 收藏
-
- 文章 · python教程 | 6小时前 |
- Pythonopen函数使用技巧详解
- 149浏览 收藏
-
- 文章 · python教程 | 6小时前 |
- Python合并多个列表的几种方法
- 190浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- ChatExcel酷表
- ChatExcel酷表是由北京大学团队打造的Excel聊天机器人,用自然语言操控表格,简化数据处理,告别繁琐操作,提升工作效率!适用于学生、上班族及政府人员。
- 3193次使用
-
- Any绘本
- 探索Any绘本(anypicturebook.com/zh),一款开源免费的AI绘本创作工具,基于Google Gemini与Flux AI模型,让您轻松创作个性化绘本。适用于家庭、教育、创作等多种场景,零门槛,高自由度,技术透明,本地可控。
- 3405次使用
-
- 可赞AI
- 可赞AI,AI驱动的办公可视化智能工具,助您轻松实现文本与可视化元素高效转化。无论是智能文档生成、多格式文本解析,还是一键生成专业图表、脑图、知识卡片,可赞AI都能让信息处理更清晰高效。覆盖数据汇报、会议纪要、内容营销等全场景,大幅提升办公效率,降低专业门槛,是您提升工作效率的得力助手。
- 3436次使用
-
- 星月写作
- 星月写作是国内首款聚焦中文网络小说创作的AI辅助工具,解决网文作者从构思到变现的全流程痛点。AI扫榜、专属模板、全链路适配,助力新人快速上手,资深作者效率倍增。
- 4543次使用
-
- MagicLight
- MagicLight.ai是全球首款叙事驱动型AI动画视频创作平台,专注于解决从故事想法到完整动画的全流程痛点。它通过自研AI模型,保障角色、风格、场景高度一致性,让零动画经验者也能高效产出专业级叙事内容。广泛适用于独立创作者、动画工作室、教育机构及企业营销,助您轻松实现创意落地与商业化。
- 3814次使用
-
- Flask框架安装技巧:让你的开发更高效
- 2024-01-03 501浏览
-
- Django框架中的并发处理技巧
- 2024-01-22 501浏览
-
- 提升Python包下载速度的方法——正确配置pip的国内源
- 2024-01-17 501浏览
-
- Python与C++:哪个编程语言更适合初学者?
- 2024-03-25 501浏览
-
- 品牌建设技巧
- 2024-04-06 501浏览

