学习笔记之第九章 时间序列(九)

第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 指定日期和时间的格式

  • 借助date()函数将日期和时间设置成只展示日期
datetime.now().date()
  • 输出结果
datetime.date(2021, 10, 29)
  • 借助time()函数将日期和时间设置成只展示时间
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 字符串和时间格式相互转换

  • 字符串和时间格式的相互转换主要用于Python中

9.3.1 将时间格式转换为字符串格式

  • 使用str()函数将时间格式转换为字符串格式
now = datetime.now()
print(type(now))
print(type(str(now)))
  • 输出结果
<class 'datetime.datetime'>
<class 'str'>

9.3.2 将字符串格式转换为时间格式

  • 使用parse()函数将字符串格式转换为时间格式
str_time = "2021-10-29"
print(type(str_time))
  • 输出结果
<class 'str'>
from dateutil.parser import parser
parser(str_time)
  • 输出结果
<dateutil.parser._parser.parser object at 0x000001AD02A63430>

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:\PythonFlie\test_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')
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值