《对比Excel,轻松学习Python数据分析》读书笔记------时间序列

9 时间序列

9.1 现在

9.1.1 现在的日期和时间

Excel
=NOW()
Python

可以利用datetime

from datetime import datetime
t=datetime.now()
print(t)
# 2022-08-06 11:59:53.297652
  • 返回一个datetime.datetime对象

9.1.2 现在的年、月、日、时、分、秒

Excel
=YEAR(NOW())
=MONTH(NOW())
=DAY(NOW())
=HOUR(NOW())
=MINUTE(NOW())
=SECOND(NOW())
Python

访问datetime.datetime对象的year,month,day,hour,minute,second属性

t=datetime.now()
print(t.year)
# 2022
print(t.month)
# 8
print(t.day)
# 6
print(t.hour)
# 13
print(t.minute)
# 37
print(t.second)
# 34

9.1.3 现在的周

Excel
=WEEKDAY(NOW(),2)  # 返回今天周几。
=WEEKNUM(NOW(),2)  # 返回今天是全年的第几周。后面的数字设置周几为一周的第一天。1代表周日。2代表周一
Python
t=datetime.now()
print(t.weekday()+1)  # 返回今天周几。由于Python从0开始计数,所以要加1
# 6
print(t.isocalendar()) # 返回今天是哪年的第几周的第几天。
# datetime.IsoCalendarDate(year=2022, week=31, weekday=6)
print(t.isocalendar()[1]) # 可以通过数字索引访问返回的对象
# 31

9.2 设置时间显示格式

Excel

选中要设置格式的区域,右键"设置单元格格式",调出格式设置界面。

“数字”>选择"日期"/"时间"的格式

在这里插入图片描述

Python

date()返回datetime.date对象,只显示日期:

t=datetime.now()
print(t.date())
# 2022-08-06

time()返回datetime.time对象,只显示时间:

t=datetime.now()
print(t.time())
# 13:47:42.966525

strftime()返回时间字符串,可以根据占位符的方式设置时间显示方式:

占位符含义
%y2位数年份
%Y4位数年份
%m月份
%d当月的第几天
%I12小时制小时数
%H24小时制小时数
%M分钟数
%S秒数

如:

t=datetime.now()
str_t=t.strftime("%Y年%m月%d日 %H:%M:%S")
print(t)
# 2022年08月06日 14:02:51

9.3 字符串与时间对象的转化

9.3.1 时间转字符串

可以利用str函数或strftime方法

t = datetime.now()
print(type(t))
# <class 'datetime.datetime'>

str1 = str(t)
print(f"{type(str1)}  {str1}")
# <class 'str'>  2022-08-06 14:08:28.817562

str2 = t.strftime("%Y年%m月%d日 %H:%M:%S")
print(f"{type(str2)}  {str2}")
# <class 'str'>  2022年08月06日 14:08:28

9.3.2 字符串转时间

利用dateutil.parser模块的parse方法,它能解析标准的类似时间格式的字符串

如:

from dateutil.parser import parse

str_time = "2022-8-6 09:08:07"
parsed_time = parse(str_time)
print(f"{type(parsed_time)}  {parsed_time}")
# <class 'datetime.datetime'>  2022-08-06 09:08:07

利用timedate.strptime函数,它能将已知格式的字符串转化为datetime对象

如:

str_time="2022年08月06日 14:08:28"
newtime=datetime.strptime(str_time,"%Y年%m月%d日 %H:%M:%S")
print(f"{type(newtime)}  {newtime}")
# <class 'datetime.datetime'>  2022-08-06 14:08:28

9.4 时间筛选

Excel

筛选时有"时间筛选"选项:

在这里插入图片描述

Python

创建时间索引可以通过pd.DatetimeIndex()

如:

time_index=pd.DatetimeIndex([
    '2008-12-12', '2008-12-16', '2009-01-01', '2007-06-07', '2008-11-02',
    '2009-09-10'
])
df = pd.DataFrame({'销量': [100, 200, 300, 400, 350, 120]}, index=time_index)
print(df)
"""
             销量
2008-12-12  100
2008-12-16  200
2009-01-01  300
2007-06-07  400
2008-11-02  350
2009-09-10  120
"""
print(df.index)
"""
DatetimeIndex(['2008-12-12', '2008-09-16', '2009-01-01', '2007-06-07',
               '2008-11-02', '2009-09-10'],
              dtype='datetime64[ns]', freq=None)
"""

可以通过特定年月日来筛选指定日期索引到的行

如:

print(df.loc['2008']) # 某年
"""
             销量
2008-12-12  100
2008-12-16  200
2008-11-02  350
"""
print(df.loc['2008-12'])  # 某年某月
"""
             销量
2008-12-12  100
2008-12-16  200
"""
print(df.loc['2009-01-01'])  #某年某月某日
"""
销量    300
Name: 2009-01-01 00:00:00, dtype: int64
"""
print(df.loc['2008-10':'2009-10'])  #支持切片
"""
             销量
2008-12-12  100
2008-12-16  200
2009-01-01  300
2008-11-02  350
2009-09-10  120
"""

如果时间序列不是行索引而是数据列,则可以通过布尔索引来进行时间筛选。

如:

df = pd.DataFrame({
    "日期": [
        '2008-12-12', '2008-012-16', '2009-01-01', '2007-06-07', '2008-11-02',
        '2009-09-10'
    ],
    "销量": [100, 200, 300, 400, 350, 120]
})
df["日期"] = df["日期"].astype("datetime64")
new_df = df[(df["日期"] > datetime(2008, 10, 1))
            & (df["日期"] < datetime(2009, 10, 30))]
print(new_df)
"""
          日期   销量
0 2008-12-12  100
1 2008-12-16  200
2 2009-01-01  300
4 2008-11-02  350
5 2009-09-10  120
"""

9.5 时间运算

9.5.1 时间之差

Excel

Excel中直接对两个日期作差,将会得到一个小数。它的整数部分表示两者相差天数。它的小数部分乘24取整得到相差的剩余小时,取余再乘60取整得到相差的剩余分钟,取余再乘60取整得到相差的剩余秒。

Python

在Python中对两个datetime.datetime对象作差,将得到一个timedelta对象。通过访问它的days,seconds属性可以获取两个时间相差几天零几秒

delta_t=datetime(2022,10,1,14,8,8)-datetime(1949,10,1,10,10,10)
print(f"{type(time_delta)}  {time_delta}")
# <class 'datetime.timedelta'>  26663 days, 3:57:58
print(delta_t.days)
# 26663
print(delta_t.seconds)
# 14278

9.5.2 时间偏移

时间偏移是指,让时间加减一个时间变化量

Excel

在Excel中,日期运算是以天为单位的。如果要偏移其他单位的时间,就需要先转化成小数形式的天数再来相加减。

Python
timedelta

timedelta对象可以帮助我们以天,秒,毫秒的单位来偏移时间:

from datetime import timedelta

t=datetime.now()
print(t)
# 2022-08-06 16:14:44.784553
print(t+timedelta(days=1,seconds=3600))
# 2022-08-07 17:14:44.784553
print(t-timedelta(days=2,seconds=7200))
# 2022-08-04 14:14:44.784553
dateoffset

可以利用pandas.tseries.offsets模块中的Day,Hour,Minute,Second对象来十分方便地进行时间偏移。

如:

from pandas.tseries.offsets import Day,Hour,Minute,Second

t=datetime.now()
print(t)
# 2022-08-06 16:19:58.241954
print(t+Day(1)+Hour(1)+Minute(11)+Second(12))
# 2022-08-07 17:31:10.241954
print(t-Day(1)-Hour(1)-Minute(11)-Second(12))
# 2022-08-05 15:08:46.241954
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木子希卡利

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值