时间序列
日期和时间类型工具
python标准库处理时间的模块:time
, calendar
和datetime
pandas本身自带处理时间的工具:pd.to_datetime
创建时间类型
import numpy as numpy
import pandas as pd
numpy.random.seed(12345)
import matplotlib.pyplot as plt
plt.rc('figure', figsize=(10, 6))
PREVIOUS_MAX_ROWS = pd.options.display.max_rows
pd.options.display.max_rows = 20
numpy.set_printoptions(precision=4, suppress=True)
from datetime import datetime
dt=datetime(2011,1,1)
dt

datetime
模块对应传入年月日参数,产生python时间格式的对象。时间对象之间可以方便做相差的时间间隔计算,也可以调用各种时间属性day
, year
和month
等。

日期间的差值
时间戳之间的差值是delta
对象,delta
对象也可以用timedelta
方法创建并用于计算。
from datetime import timedelta
delta=timedelta(12)
dt+delta

默认传入的timedelta
里面的参数是天数。
now=datetime.now()
now-dt

字符串和datetime的相互转换

字符串转换为datatime用strptime
这里的p
代表parsing
的意思
value = '2011-01-03'
datetime.strptime(value, '%Y-%m-%d')


我们可以指定解析的样式。
当然,很多时候我们如果都要写好解析的样式%Y-%m-%d
那样是比较麻烦的,在这种情况下我们可以用datautil.parser.parse
方法去自动解析,支持大部分可以识别的日期格式。
from dateutil.parser import parse
parse('20111101')


索引、选择、子集
如果以日期作为序列的话,可以传入一个可以被解释为时间的索引进行选择和切片。
longer_ts = pd.Series(numpy.random.randn(1000),
index=pd.date_range('1/1/2000', periods=1000))
longer_ts

以下三种方式切片都是获得相同的结果。
longer_ts['1/10/2001']
longer_ts['20010110']
longer_ts['2001-01-10']

我们也可以把频率获取到月份。
longer_ts['2001-01']

索引既可以传入时间字符串,也可以传入datetime
对象
longer_ts[datetime(2001, 1,1):]

日期范围、频率和移位
pandas.date_range
可以生成指定的长度的DatetimeIndex
:
pd.date_range('2018-01-01', '2018-05-01')

我们还可以指定periods
和freq
参数指定周期和频率
rng = pd.date_range('2000-01-01', periods=3, freq='M')
ts = pd.Series(numpy.random.randn(3), index=rng)
ts

除了start
参数,我们还可以传入end
参数。
如果是end
参数的话就是往前追溯。
rng = pd.date_range(end='2000-01-01', periods=3, freq='M')
ts = pd.Series(numpy.random.randn(3), index=rng)
ts

网友评论