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


    9 时间序列

    9.1 现在

    9.1.1 现在的日期和时间

    Excel

    =NOW()
    
    • 1

    Python

    可以利用datetime

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

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

    Excel

    =YEAR(NOW())
    =MONTH(NOW())
    =DAY(NOW())
    =HOUR(NOW())
    =MINUTE(NOW())
    =SECOND(NOW())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    9.1.3 现在的周

    Excel

    =WEEKDAY(NOW(),2)  # 返回今天周几。
    =WEEKNUM(NOW(),2)  # 返回今天是全年的第几周。后面的数字设置周几为一周的第一天。1代表周日。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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    9.2 设置时间显示格式

    Excel

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

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

    在这里插入图片描述

    Python

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

    t=datetime.now()
    print(t.date())
    # 2022-08-06
    
    • 1
    • 2
    • 3

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

    t=datetime.now()
    print(t.time())
    # 13:47:42.966525
    
    • 1
    • 2
    • 3

    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
    
    • 1
    • 2
    • 3
    • 4

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

    9.3.1 时间转字符串

    可以利用str函数或strftime方法

    t = datetime.now()
    print(type(t))
    # 
    
    str1 = str(t)
    print(f"{type(str1)}  {str1}")
    #   2022-08-06 14:08:28.817562
    
    str2 = t.strftime("%Y年%m月%d日 %H:%M:%S")
    print(f"{type(str2)}  {str2}")
    #   2022年08月06日 14:08:28
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    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}")
    #   2022-08-06 09:08:07
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    利用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}")
    #   2022-08-06 14:08:28
    
    • 1
    • 2
    • 3
    • 4

    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)
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

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

    如:

    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
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

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

    如:

    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
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    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}")
    #   26663 days, 3:57:58
    print(delta_t.days)
    # 26663
    print(delta_t.seconds)
    # 14278
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
  • 相关阅读:
    Leo赠书活动-08期 【程序员到架构师演变】文末送书
    技术人必读的「CDP选型指南」来了!
    气人|这种通过率调优技巧居然这么晚才让我知道
    【大厂AI课学习笔记】【2.2机器学习开发任务实例】(5)数据理解
    数模之线性规划
    Cookie简介
    java基于springboot+vue的校园跑腿系统 nodejs前后端分离
    Talk | ACL‘23 杰出论文,MultiIntruct:通过多模态指令集微调提升VLM的零样本学习
    玻色量子签约移动云“五岳”量子云计算创新加速计划!
    MFC的YUV播放器实现
  • 原文地址:https://blog.csdn.net/ncu5509121083/article/details/126196998