Pandas:时序数据(上)

时间是一个比较特殊的事物,不像数字有具体的进制,可以做相关的计算。比如时间分秒时是60进制,时和天又是24进制,一周又有7天,一月又有28到31天不等,等等。这就给我们处理时间问题带来了麻烦。为了更好地表达现实世界中的时间,计算机设计者提出了一些概念来进行表达。

  • 固定时间
  • 这个非常简单,它是一个独立的时间,不在任何周期时,比如中午 13:30 睡觉,不代表你每半个小时就睡一次。其他的如,2020 年、农历四月十八、19世纪等等。

固定的时间有一定的属性,如所在年、月、日、毫秒等。

  • 时间戳 timestamp

  • Unix时间戳(Unix timestamp),时间戳是指格林威治时间1970年01月01日00时00分00秒起至当下的总秒数。它是一个非常大的数字,一直以一秒的步长在增加。如:1591684854 代表北京时间 2020/6/9 14:40:54。那么 1970年 年以前的时间怎么表示呢?用负数,如-1591684957 代表1919/7/26 2:17:23。

  • 时长时差 Time deltas

  • 代表一个时间长度,但它没有指定的开始时间和结束时间,比如一首歌4分钟,你不管从什么时候开始,它都会占用4分钟。

  • 格式化时间

  • 由于原始时间数据可能是时间戳,也有可能是其他类型的数据,我们在使用时想按照一定的格式进行显示,就需要做格式化处理。如时间戳 1591684854 和 2020/6/9 14:40:54 转换为为 2020年06月09日 这样的中文格式。

  • 周期时间

  • 有开始、有结束,并且有时间单位周期的时间,比如从大学毕业后,我开始工作,每周一到周五去工作,持续到65岁退休,这个就是工作日周期。另如钟表,每半小时响一次,开始时间是我安装好它,结束时间是它坏掉的时候。

  • 日期偏移 Date offsets

  • 周期时间中有一个频率,一个频率是一个单位,日期偏移是基于这个频率,如一个周期的频率是小时,那偏移三个频率就是三小时。比如偏移一个工作周,这个工作周期是自己定义的。

  • 时区

  • 每个固定的时间都会有一个时区,一般为你电脑本地的时区,当然你根据需要可以进行调整。

  • 工作日

  • 在数据分析时,经常会与是否工作日相关,除了正常的周末,每个国家和地区节假日,甚至具体到一些公司都会有一些特定的作息,一般需要自己来指定这个工作日的周期。

  • 时间转换

  • 时间转换包括时间表达格式的转换,也会有一些时间计算,比如给一个时间,转为去年的当天、100天前的当天、转换为特定时区的时间等等。

时间序列(Time series)数据是非常重要的数据类型,在各个领域的研究中,都与时间相关,因此对于时间数据的处理就越来越重要。Pandas 提供了多种时间数据类型和处理方法。

1、固定时间

时间的表示

使用 python 的 datetime 库
import datetime
# 至少需要年月日
pd.Timestamp(datetime.datetime(2020, 6, 8))
# Timestamp('2020-06-08 00:00:00')

# 指定是时分秒
pd.Timestamp(datetime.datetime(2020, 6, 8, 16, 17, 18))
# Timestamp('2020-06-08 16:17:18')

创建时间点

pd.Timestamp() 是定义时间的主要函数,代替 python 中的 datetime.datetime 对象。

pd.Timestamp('2012-05-01')
# Timestamp('2012-05-01 00:00:00')
pd.Timestamp('2017-01-01T12')
# Timestamp('2017-01-01 12:00:00')

时间的属性


时间的方法


2、时长数据

Timedelta 是时间差异,也就是时长,以差异单位表示,例如 天,小时,分钟,秒。 它们可以是正数的也可以是负数的。也就是两个时间的距离长短,这在业务中会经常出现,比如体育比赛中短跑的时长,可能是正数,也可能是负数,正数代表时间多多少,负数代表时间少多少。

创建时间差


时长的加减

3、时间序列

时序索引

类型转换

  • astype 是最简单的时间转换方法,它只能针对相对标准的时间格式,如:


s = pd.Series(['2016-01-31', '2016-02-29', '2016-03-31'])
s.astype('datetime64[ns]')
'''
0   2016-01-31
1   2016-02-29
2   2016-03-31
dtype: datetime64[ns]
'''
  • Pandas 提供的 pd.to_datetime() 是识别转换时间的主要工具。

  • 可以使用 pd.Timestamp() 进行转换:
pd.to_datetime('2010/11/12')
#Timestamp('2010-11-12 00:00:00')

pd.Timestamp('2010/11/12')
#Timestamp('2010-11-12 00:00:00')
  • pd.DatetimeIndex 也可以转换:
pd.DatetimeIndex(['2018-01-01', '2018-01-03', '2018-01-05'])
#DatetimeIndex(['2018-01-01', '2018-01-03', '2018-01-05'], dtype='datetime64[ns]', freq=None)

pd.DatetimeIndex(['2018-01-01', '2018-01-03', '2018-01-05'], freq='infer')
#DatetimeIndex(['2018-01-01', '2018-01-03', '2018-01-05'], dtype='datetime64[ns]', freq='2D')

按格式转换

对于有格式的数据,需要指定数据的格式:

时间访问器.dt

对于时间序列数据,可以使用 s.dt.xxx 的形式来访问它们的属性和调用它们的方法:

时序数据移动

posted @ 2022-07-09 20:03  朝南烟  阅读(103)  评论(0编辑  收藏  举报
body { color: #000; background-color: #e6e6e6; font-family: "Helvetica Neue",Helvetica,Verdana,Arial,sans-serif; font-size: 12px; min-height: 101%; background: url(https://images.cnblogs.com/cnblogs_com/caolanying/1841633/o_2009041…ly1geq8oc9owbj21hc0u0th5.jpg) fixed; } #home { margin: 0 auto; opacity: 0.8; width: 65%; min-width: 1080px; background-color: #fff; padding: 30px; margin-top: 50px; margin-bottom: 50px; box-shadow: 0 2px 6px rgba(100, 100, 100, 0.3); }