利用Python进行数据分析笔记-时间序列(转换、索引、偏移)

本文详细介绍了Python中处理时间序列数据的方法,包括字符串与时间的转换、时间序列基础如索引选择、时间偏移等。讨论了datetime模块、pandas的Timestamp对象、to_datetime方法以及时间序列的切片、重复索引处理、日期范围生成和数据偏移操作。文章还提到了dateutil库和时间戳的精度,以及如何处理非唯一时间戳的情况。
摘要由CSDN通过智能技术生成

时间序列指能在任何能在时间上观测到的数据。很多时间序列是有固定频率(fixed frequency)的,意思是数据点会遵照某种规律定期出现,比如每15秒,每5分钟,或每个月。时间序列也可能是不规律的(irregular),没有一个固定的时间规律。如何参照时间序列数据取决于我们要做什么样的应用,我们可能会遇到下面这些:

  • Timestamps(时间戳),具体的某一个时刻
  • Fixed periods(固定的时期),比如2007年的一月,或者2010年整整一年
  • Intervals of time(时间间隔),通常有一个开始和结束的时间戳。Periods(时期)可能被看做是Intervals(间隔)的一种特殊形式。
  • Experiment or elapsed time(实验或经过的时间);每一个时间戳都是看做是一个特定的开始时间(例如,在放入烤箱后,曲奇饼的直径在每一秒的变化程度)

日期和时间数据类型及其工具

import pandas as pd
import numpy as np
from datetime import datetime
# 获取时间
now = datetime.now()
now
datetime.datetime(2018, 5, 10, 13, 31, 51, 898458)
print(now.year,'年')
print(now.month,'月')
print(now.day,'日')
print(now.minute,'分')
print(now.minute,'秒')
2018 年
5 月
10 日
31 分
31 秒

datetime能保存日期和时间到微妙级别。timedelta表示两个不同的datetime对象之间的时间上的不同:

# 时间对比
delta = datetime(2011, 1, 7) - datetime(2008, 6, 24, 8, 15)
delta
datetime.timedelta(926, 56700)
print('时间差多少天:',delta.days)
print('时间差多少秒:',delta.seconds)
时间差多少天: 926
时间差多少秒: 56700

我们可以在一个datetime对象上,添加或减少一个或多个timedelta,这样可以产生新的变化后的对象

from datetime import timedelta

start = datetime(2011, 1, 7)
start + timedelta(12)    # 加12天
datetime.datetime(2011, 1, 19, 0, 0)
start - 2 * timedelta(12)   # 减24天
datetime.datetime(2010, 12, 14, 0, 0)

下表汇总了一些datetime模块中的数据类型:

1、字符串与时间的转换

我们可以对datetime对象,以及pandas的Timestamp对象进行格式化,这部分之后会介绍,使用str或strftime方法,传入一个特定的时间格式就能进行转换:

# 时间转字符串
stamp = datetime(2011, 1, 3)
str(stamp)
'2011-01-03 00:00:00'
stamp.strftime('%Y-%m-%d')
'2011-01-03'

下表是关于日期时间类型的格式:

我们可以利用上面的format codes(格式码;时间日期格式)把字符串转换为日期,这要用到datetime.strptime:

# 字符串转时间
value = '2011-01-03'
datetime.strptime(value, '%Y-%m-%d')
datetime.datetime(2011, 1, 3, 0, 0)
datestrs = ['7/6/2011', '8/6/2011']
[datetime.strptime(x, '%m/%d/%Y') for x in datestrs]
[datetime.datetime(2011, 7, 6, 0, 0), datetime.datetime(2011, 8, 6, 0, 0)]

对于一个一直的时间格式,使用datetime.strptime来解析日期是很好的方法。但是,如果每次都要写格式的话很烦人,尤其是对于一些比较常见的格式。在这种情况下,我们可以使用第三方库dateutil中的parser.parse方法(这个库会在安装pandas的时候自动安装)<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值