获取当前时刻的时间
获取当前时刻的时间就是获取此时此刻与时间相关的数据,除了具体的年、月、日、时、分、秒,还会单独看年、月、周、日等指标。
返回当前时刻的日期和时间
返回当前时刻的日期和时间在Excel和Python中都借助函数now()实现。
在Excel中直接在单元格里输入now()函数即可,在Python中则使用如下代码:
分别返回当前时刻的年、月、日
返回当前时刻的年份在Excel和Python中都借助函数year实现。
在Excel的单元格中输入如下函数:
在Python中使用如下代码:
返回当前时刻的月份在Excel和Python中都借助函数month实现。
在Excel的单元格中输入如下函数:
在Python中使用如下代码:
返回当前时刻的日在Excel和Python中都借助函数day实现。
在Excel的单元格中输入如下函数:
在Python中使用如下代码:
上面几个函数在其他任意日期或时间中都适用。
返回当前时刻的周数
与当前时刻的周相关的数据有两个,一个是当前时刻是一周的周几,另一个是返回当前时刻所在的周在全年的第几周。
返回周几
返回当前时刻是周几在Excel和Python中都借助weekday()函数实现。
在Excel的单元格中输入如下函数:
之所以用“now()-1”是因为Excel把周日作为一周中的第一天。
在Python中使用如下代码:
Python中周几是从0开始数的,周日返回的是6,所以在后面加1。
返回周数
返回当前时刻所在周的周数在Excel中使用的是weeknum()函数,在Python中使用的isocalendar()函数。
在Python中使用如下代码:
指定日期和时间的格式
在Excel中要设置日期的时间格式,直接选中要设置的单元格,然后单击鼠标右键,在弹出的下拉菜单中选择设置单元格格式选项即可设置单元格格式。因为日期和时间是两个概念,所以在Excel中设置日期和时间是分开的,如下图所示。
在Python中,借助date()函数将日期和时间设置成只展示日期。
借助time()函数将日期和时间设置成只展示时间。
借助strftime()函数可以自定义时间和日期的格式,strftime()函数是将日期和时间的格式转化为某些自定义的格式,具体的格式有以下几种。
用strftime()函数自定义时间和日期的格式的例子如下所示。
字符串和时间格式相互转换
字符串和时间格式的相互转换主要用于Python中。
from datetime import datetime
# str转时间格式:
t = '2019-03-17 11:00:00'
t = datetime.strptime(t, "%Y-%m-%d %H:%M:%S")
print(t,type(t))
# 时间格式转str:
dc = t.strftime("%Y-%m-%d %H:%M:%S")
print(dc,type(dc))
时间索引
时间索引就是根据时间来对时间格式的字段进行数据选取的一种索引方式。
在Excel中,对于时间格式的列有专门的日期筛选,根据需要选择相应的筛选条件即可,筛选条件如下图所示。
在Python中,可以选取具体的某一时间对应的值,也可以选取某一段时间内的值。
新建一个时间索引的DataFrame如下:
获取2018年的数据:
获取2018年1月的数据:
获取2018年1月1日到2018年1月5日的数据:
获取2018年1月1日的数据:
上面的索引方法适用于索引是时间的情况下,但是并不是在所有情况下,时间都可以索引的,比如一个订单表中客户姓名是索引,成交时间就是一个普通列,这时候你先选取某一段时间内的成交订单该怎么办呢?
因为时间也有大小关系的,所有我们可以利用前面学过的索引方式中的布尔索引来对非索引列的时间进行选取,代码如下:
时间运算
两个时间之差
在日常业务中经常会用到计算两个时间的差,比如要计算一个用户在某平台上的生命周期,则用户最后一次登录产品的时间减去用户首次登录产品的时间即可得到。
在Excel中两日期直接做差会得到一个带小数点的天数,如果只想看两日期之间差多少天,那么直接取整数部分即可;如果想看两日期之间差多少小时、分钟,则需要对小数部分进行计算,小数部分乘24得到的结果中的整数部分就是小时数,它的小数部分再乘60就是分钟数。
在Python中两个时间做差会返回一个timedelta对象,该对象中包含天数、秒、微秒三个等级,如果要获取小时、分钟,则需要进行换算。
时间偏移
时间偏移是指给时间往前推或往后推一段时间,即加或减一段时间。
由于Excel中的运算单位都是天,因此若想对某一个时间具体加/减某一单位的时间,如果是加/减小时或者分钟,则需要把小时或分钟换算成对应的天。
在Python中实现时间偏移的方式有两种:第一种是借助timedelta,但是它只能偏移天、秒、微秒单位的时间;第二种是用Pandas中的日期偏移量(date offset)。
-
timedelta
由于timedelta只支持天、秒、微妙单位的时间运算,如果是其他单位的时间运算,则需要换算成以上三种单位中的一种方可进行偏移。
-
date offset
date offset可以直接实现天、小时、分钟单位的时间偏移,不需要换算,相比timedelta要方便一些。
小结
时间序列
from datetime import datetime
返回当前时刻的日期和时间
返回当前时间 t=datetime.now()
返回年月日时分秒 t.year t.month t.day t.hour t.minute t.second
返回周几 t.weekday()+1 周1从0开始
返回今年第几周第几天 t.isocalendar()
指定日期和时间的格式
只显示日期 date()
只显示时间 time()
格式化显示时间 strftime()
字符串和时间对象转换
时间-》字符串 strftime("格式")
字符串-》时间 strptime(时间字符串,"格式")
时间索引
pd.DatetimeIndex(时间对象) # 将其设置为时间索引
# 查询2018年数据 data.loc["2018"]
# 查询2018年1月数据 data.loc["2018-01"]
# 查询2018年1月1日到2018年1月5日数据 data.loc["2018/01/01":"2018/01/05"]
如果时间只是普通列,那么可以利用布尔索引进行查询
# 选取成交时间为2018年8月8日的订单 df[df["成交时间"]==datetime(2018,8,8)]
# 选取成交时间为2018年8月9日之后的订单 df[df["成交时间"]>datetime(2018,8,9)]
# 选取成交时间为2018年8月10日之前的订单 df[df["成交时间"]<datetime(2018,8,10)]
# 选取成交时间为2018年8月8日到2018年8月11日之间的订单 df[(df["成交时间"]>datetime(2018,8,8)) & (df["成交时间"]<datetime(2018,8,11))]
时间运算
两个时间之差
时间对象运算得到 timedelta 对象
t1 = datetime.now()
t2 = datetime(1997,7,1)
tt = t1-t2 # 还可以和常数进行运算
display(tt.days,tt.seconds)
时间偏移
Python的时间偏移最多只能按天加..
timedelta(days=..) timedelta(seconds=..)
Pandas也有时间偏移
from pd.tseries.offsets import Day,Hour,Minute
date+Day(1) date-Hour(2) date+Minute(5)