Pandas10--时序数据


1 时序中的基本对象

  • 【例子】:例如2020年9月7日周一早上8点整需要到教室上课,这个课会在当天早上10点结束
  • 时间戳(Date times):即’2020-9-7 08:00:00’和’2020-9-7 10:00:00’这两个时间点分别代表了上课和下课的时刻。
    • pandas中称为 Timestamp
    • 一系列的时间戳可以组成 DatetimeIndex,而将它放到 Series中后, Series 的类型就变为了 datetime64[ns],如果有涉及时区则为 datetime64[ns, tz],其中tztimezone的简写。
  • 时间差(Time deltas):即上课需要的时间
    • 两个 Timestamp 做差就得到了时间差,pandas中利用 Timedelta 来表示。
    • 类似的,一系列的时间差就组成了TimedeltaIndex, 而将它放到Series中后, Series的类型就变为了timedelta64[ns]
  • 时间段(Time spans):即在8点到10点这个区间都会持续地在上课
    • pandas 利用 Period 来表示。
    • 类似的,一系列的时间段就组成了PeriodIndex, 而将它放到 Series 中后, Series的类型就变为了Period
  • 日期偏置(Date offsets):假设你只知道9月的第一个周一早上8点要去上课,但不知道具体的日期,那么就需要一个类型来处理此类需求
    • pandas 中的 DateOffset
    • 同时,pandas 中没有为一列时间偏置专门设计存储类型,一般来说我们只需要对一批时间特征做一个统一的特殊日期偏置。
概念 单元素类型 数组类型 pandas数据类型
Date times Timestamp DatetimeIndex datetime64[ns]
Time deltas Timedelta TimedeltaIndex timedelta64[ns]
Time spans Period PeriodIndex period[freq]
Date offsets DateOffset None None

2 时间戳

2.1 Timestamp的构造与属性

  • pd.Timestamp函数:单个时间戳的生成利用此函数实现
    • 通过 year, month, day, hour, min, second可以获取具体的数值
    • 【例子】
    ts = pd.Timestamp('2020/1/1')
    ts
    # Timestamp('2020-01-01 00:00:00')
    ts = pd.Timestamp('2020-1-1 08:10:30')
    ts
    # Timestamp('2020-01-01 08:10:30')
    
    ts.year
    # 2020
    ts.second
    # 30
    
  • 时间戳的表示范围: 在 pandas中,时间戳的最小精度为纳秒 ns ,由于使用了64位存储,可以表示的时间范围大约可以如下计算:
    Time Range = 2 64 1 0 9 × 60 × 60 × 24 × 365 ≈ 585 ( =\frac{2^{64}}{10^{9} \times 60 \times 60 \times 24 \times 365} \approx 585( =109×60×60×24×365264585( Years ) ) )
    通过 pd.Timestamp.maxpd.Timestamp.min 可以获取时间戳表示的范围:
    pd.Timestamp.max
    # Timestamp('2262-04-11 23:47:16.854775807')
    pd.Timestamp.min
    # Timestamp('1677-09-21 00:12:43.145225')
    pd.Timestamp.max.year - pd.Timestamp.min.year
    # 585
    

2.2 Datetime序列的生成

  • to_datetime函数:能够把一列时间戳格式的对象转换成为datetime64[ns]类型的时间序列
    • 在极少数情况,时间戳的格式不满足转换时,可以强制使用 format进行匹配
    • 【例子】
    pd.to_datetime(['2020-1-1', '2020-1-3', '2020-1-6'])
    #  DatetimeIndex(['2020-01-01', '2020-01-03', '2020-01-06'], dtype='datetime64[ns]', freq=None)
    temp = pd.to_datetime(['2020\\1\\1','2020\\1\\3'],format='%Y\\%m\\%d')
    temp
    # DatetimeIndex(['2020-01-01', '2020-01-03'], dtype='datetime64[ns]', freq=None)
    

    注意:上面由于传入的是列表,而非 pandas 内部的Series ,因此返回的是 DatetimeIndex,如果想要转为datetime64[ns]的序列,需要显式用 Series 转化

    pd.Series(temp).head()
    '''
    0   2020-01-01
    1   2020-01-03
    dtype: datetime64[ns]
    '''
    
    • 还存在一种把表的多列时间属性拼接转为时间序列的to_datetime操作,此时的列名必须和以下给定的时间关键词列名一致
    df_date_cols = pd.DataFrame({
         'year': [2020, 2020],
                                 'month': [1, 1],
                                 'day': [1, 2],
                                 'hour': [10, 20],
                                 'minute': [30, 50],
                                 'second': [20, 40]})
    pd.to_datetime(df_date_cols
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值