第9章 时间序列
9.1 获取当前时刻的时间
- 获取当前时刻的时间就是获取此时此刻与时间相关的数据,除了具体的年、月、日、时、分、秒,还会单独看年、月、周、日等指标。
9.1.1 返回当前时刻的日期和时间
- 返回当前时刻的日期和时间在Excel和Python中都借助函数now()实现
- 在Excel中直接在单元格里输入now()函数即可,在Python中则使用如下代码
from datetime import datetime
datetime.now()
datetime.datetime(2021, 10, 29, 16, 34, 19, 772823)
9.1.2 分别返回当前时刻的年、月、日
#返回当前时刻的年份
datetime.now().year
2021
#返回当前时刻的月份
datetime.now().month
10
#返回当前时刻的日期
datetime.now().day
29
9.1.3 返回当前时刻的周数
- 与当前时刻的周相关的数据有两个,一个是当前时刻是一周中的周几,另一个是返回当前时刻所在的周在全年的周里面是第几周。
#返回周几
datetime.now().weekday()+1
5
- Python中周几是从0开始数的,周日返回的是6,所以在后面加1。
- 返回当前时刻所在周的周数在Excel中使用的是weeknum()函数,在Python中使用的是isocalendar()函数。
#返回周数
datetime.now().isocalendar()
(2021, 43, 5)
9.2 指定日期和时间的格式
datetime.now().date()
datetime.date(2021, 10, 29)
datetime.now().time()
datetime.time(16, 51, 24, 412334)
- 借助strftime()函数可以自定义时间和日期的格式,strftime()函数是将日期和时间的格式转化为某些自定义的格式,具体的格式有以下几种。
datetime.now().strftime("%Y-%m-%d")
'2021-10-29'
datetime.now().strftime("%Y-%m-%d %H:%M:%S")
'2021-10-29 16:54:52'
9.3 字符串和时间格式相互转换
9.3.1 将时间格式转换为字符串格式
now = datetime.now()
print(type(now))
print(type(str(now)))
9.3.2 将字符串格式转换为时间格式
str_time = "2021-10-29"
print(type(str_time))
from dateutil.parser import parser
parser(str_time)
9.4 时间索引
- 在Python中,可以选取具体的某一时间对应的值,也可以选取某一段时间内的值。
import pandas as pd
import numpy as np
index = pd.DatetimeIndex(["2018-01-01","2018-01-02","2018-01-03","2018-01-04","2018-01-05",
"2018-01-06","2018-01-07","2018-01-08","2018-01-09","2018-01-10"])
data = pd.Dataframe(np.arange(1,11),columns = ["num"],index = index)
data
num
2018-01-01 1
2018-01-02 2
2018-01-03 3
2018-01-04 4
2018-01-05 5
2018-01-06 6
2018-01-07 7
2018-01-08 8
2018-01-09 9
2018-01-10 10
data["2018"]
num
2018-01-01 1
2018-01-02 2
2018-01-03 3
2018-01-04 4
2018-01-05 5
2018-01-06 6
2018-01-07 7
2018-01-08 8
2018-01-09 9
2018-01-10 10
data["2018-01"]
num
2018-01-01 1
2018-01-02 2
2018-01-03 3
2018-01-04 4
2018-01-05 5
2018-01-06 6
2018-01-07 7
2018-01-08 8
2018-01-09 9
2018-01-10 10
data["2018-01-01":"2018-01-05"]
num
2018-01-01 1
2018-01-02 2
2018-01-03 3
2018-01-04 4
2018-01-05 5
- 上面的索引方法适用于索引是时间的情况下,但是并不是在所有情况下,时间都可以做索引,比如一个订单表中客户姓名是索引,成交时间就是一个普通列,这个时候你想选取某一段时间内的成交订单该怎么办呢?
df = pd.read_excel(r"D:PythonFlietest_1.xlsx",header=0)
df
订单编号 客户姓名 唯一识别码 年龄 交易日期 销售id
0 A1 张旭 101 24 2018-10-01 1
1 A2 李刚 102 34 2018-10-02 2
2 A3 孙峰 103 23 2018-10-03 1
3 A4 赵恒 104 204 2018-10-04 2
4 A5 赵恒 104 204 2018-08-12 3
df[df["交易日期"] == datetime(2018,10,1)]
订单编号 客户姓名 唯一识别码 年龄 交易日期 销售id
0 A1 张旭 101 24 2018-10-01 1
df[df["交易日期"] > datetime(2018,10,1)]
订单编号 客户姓名 唯一识别码 年龄 交易日期 销售id
1 A2 李刚 102 34 2018-10-02 2
2 A3 孙峰 103 23 2018-10-03 1
3 A4 赵恒 104 204 2018-10-04 2
df[(df["交易日期"] > datetime(2018,10,1))&(df["交易日期"] < datetime(2018,10,4))]
订单编号 客户姓名 唯一识别码 年龄 交易日期 销售id
1 A2 李刚 102 34 2018-10-02 2
2 A3 孙峰 103 23 2018-10-03 1
9.5 时间运算
9.5.1 两个时间之差
- 在Python中两个时间做差会返回一个timedelta对象,该对象中包含天数、秒、微秒三个等级,如果要获取小时、分钟,则需要进行换算。
cha = datetime(2019,5,21,9,18) - datetime(2019,5,10,21,45)
#返回天
cha.days
10
#返回秒
cha.seconds
41580
#换算成小时时间差
cha.seconds/3600
11.55
9.5.2 时间偏移
- 时间偏移是指给时间往前推或往后推一段时间,即加或减一段时间。
- 在Python中实现时间偏移的方式有两种:
- 第一种是借助timedelta,但是它只能偏移天、秒、微秒单位的时间;
#timedelta
from datetime import timedelta
date = datetime(2018,5,18,20,32)
date + timedelta(days = 1)
datetime.datetime(2018, 5, 19, 20, 32)
date + timedelta(seconds = 60)
datetime.datetime(2018, 5, 18, 20, 33)
date - timedelta(seconds = 60)
datetime.datetime(2018, 5, 18, 20, 31)
- 第二种是用Pandas中的日期偏移量(dateoffset)。
#timedelta
from pandas.tseries.offsets import Day,Hour,Minute,Second
date + Day(1)
Timestamp('2018-05-19 20:32:00')
date + Second(60)
Timestamp('2018-05-18 20:33:00')