🍉CSDN小墨&晓末:https://blog.csdn.net/jd1813346972
个人介绍: 研一|统计学|干货分享
擅长Python、Matlab、R等主流编程软件
累计十余项国家级比赛奖项,参与研究经费10w、40w级横向
文章目录
【Python进阶(九)】——日期和时间,建议收藏!
该篇文章主要讲解了Python数据结构之日期和时间,通过代码演示相关定义、转换方法、计算方法、时间索引等,同时给出相关错误示范以加强使用理解。
1 日期和时间类型数据介绍
在Python中,处理日期和时间主要有几种不同的类型,这些类型是通过Python的datetime
模块提供的。这个模块定义了五种主要的数据类型来操作日期和时间:
- datetime.date:仅表示日期,不包含具体时间(时分秒)。
- datetime.time:仅表示时间,不包含日期。
- datetime.datetime:表示日期和时间。
- datetime.timedelta:表示两个时间点之间的差异(即时间间隔),如天、小时、分钟、秒等。
- datetime.tzinfo:是一个抽象基类,用于处理时区信息。在实际应用中,你通常会使用它的子类,如
pytz
库中的时区对象,而不是直接使用tzinfo
。
2 时间和日期类型的定义
运行程序:
import datetime as dt
myTime = dt.time(12,34,59)#dt.time(时、分、秒)
print("myTime:",myTime)
print("myTime.hour:",myTime.hour)
print("myTime.minute:",myTime.minute)
print("myTime.second:",myTime.second)
dt.datetime(year = 2018,month = 3,day = 3)#datetime(年月日必选,其他为可选)
?dt.datetime#系统函数提示
运行结果:
myTime: 12:34:59
myTime.hour: 12
myTime.minute: 34
myTime.second: 59
datetime.datetime(2018, 3, 3, 0, 0)
Object `dt.datetime#系统函数提示` not found.
3 时间和日期类型的定义报错示例
运行程序:
dt.datetime(month=3,day=3,second=59)#报错,年为必选
运行结果:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In[36], line 1
----> 1 dt.datetime(month=3,day=3,second=59)
TypeError: function missing required argument 'year' (pos 1)
4 转换方法
运行程序:
from dateutil import parser
date= parser.parse("3th of July,2018")#用dateutil包中的parer()进行日期格式转换
print(date)
date= parser.parse("2019-1-3")
print(date)
import pandas as pd
pd.to_datetime("3th of July,2018") #利用pandas包中的方法进行格式转换,返回值类型为Timestamp
import pandas as pd
pd.to_datetime("2019-1-3")
运行结果:
2018-07-03 00:00:00
2019-01-03 00:00:00
Timestamp('2018-07-03 00:00:00')
Timestamp('2019-01-03 00:00:00')
5 转换方法错误案例
5.1 转换方法错误案例1
运行程序:
dt.datetime("3th of July,2018")#报错:非标准时间格式
运行结果:
TypeError Traceback (most recent call last)
<ipython-input-76-ae7cd03854b5> in <module>
----> 1 dt.datetime("3th of July,2018")
TypeError: an integer is required (got type str)
5.2 转换方法错误案例2
运行程序:
dt.datetime("2019-1-3")#报错:非标准时间格式
运行结果:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-76-ae7cd03854b5> in <module>
----> 1 dt.datetime("3th of July,2018")
TypeError: an integer is required (got type str)
6 显示系统当前时间
运行程序:
dt.datetime.now()
dt.datetime.today()
now=dt.datetime.now()
now.strftime("%W"),now.strftime("%a"),now.strftime("%A"),now.strftime("%B"),now.strftime("%C"),now.strftime("%D")#设置显示情况
#%W: 一年中的星期数:00-53
#%a:本地简化星期名称
#%A:本地简化月份名称
#%b:本地简化月份名称
#%B:本地完整月份名称
#%c:本地相应星期和时间表示
运行结果:
datetime.datetime(2024, 8, 23, 0, 4, 9, 308680)
datetime.datetime(2024, 8, 23, 0, 4, 9, 311681)
('34', 'Fri', 'Friday', 'August', '20', '08/23/24')
7 计算时差
运行程序:
d1=dt.datetime.now()
d2=dt.datetime(year=2017,month=3,day=3)
(d1-d2).days #时差天
运行结果:
2730
8 时间索引
运行程序:
index=pd.DatetimeIndex(["2018-1-1","2019-1-2","2018-1-3","2018-1-4","2018-1-5"])#设置时间索引
data=pd.Series([1,2,3,4,5],index=index)
data
data["2018-1-2"]#特定索引数据
data["2018"] #此时已经过滤掉2019的数据
data- data["2018-1-4"]#所有值减去特定日期数据
data
data.to_period(freq="D")#代表时间单位为天
data.to_period(freq="M")#代表时间单位为月
data- data[3] #减去第四个数据
data- data["20180104"]#减去2018年1月4日数据
运行结果:
2018-01-01 1
2019-01-02 2
2018-01-03 3
2018-01-04 4
2018-01-05 5
dtype: int64
2
2019-01-02 2
dtype: int64
2018-01-01 -3
2019-01-02 -2
2018-01-03 -1
2018-01-04 0
2018-01-05 1
dtype: int64
2018-01-01 1
2019-01-02 2
2018-01-03 3
2018-01-04 4
2018-01-05 5
dtype: int64
2018-01-01 1
2019-01-02 2
2018-01-03 3
2018-01-04 4
2018-01-05 5
Freq: D, dtype: int64
2018-01 1
2019-01 2
2018-01 3
2018-01 4
2018-01 5
Freq: M, dtype: int64
2018-01-01 -3
2019-01-02 -2
2018-01-03 -1
2018-01-04 0
2018-01-05 1
dtype: int64
2018-01-01 -3
2019-01-02 -2
2018-01-03 -1
2018-01-04 0
2018-01-05 1
dtype: int64
9 period_range()函数
运行程序:
pd.period_range("2019-1",periods=10, freq="D")#pd.period_range("起始时间",个数, 时间单位)
pd.period_range("2019-1",periods=10, freq="M")
运行结果:
PeriodIndex(['2019-01-01', '2019-01-02', '2019-01-03', '2019-01-04',
'2019-01-05', '2019-01-06', '2019-01-07', '2019-01-08',
'2019-01-09', '2019-01-10'],
dtype='period[D]')
PeriodIndex(['2019-01', '2019-02', '2019-03', '2019-04', '2019-05', '2019-06',
'2019-07', '2019-08', '2019-09', '2019-10'],
dtype='period[M]')