简单介绍python处理时间。
基础python处理时间与日期
python基本的处理时间对象是datetime模块和dateutil模块。
from datetime import datetime
datetime(year=2015, month=7, day=4)
直接解析字符串
from dateutil import parser
date = parser.parse("4th of July, 2015")
date
numpy 的时间数组类型 datetime64
import numpy as np
date = np.array('2015-07-04', dtype=np.datetime64)
date
np.datetime64('2015-07-04')
快速创建数组:
date + np.arange(12)
np可以解析各种时间字符串格式,也可以指定解析类容。
Code | Meaning | Time span (relative) | Time span (absolute) |
---|---|---|---|
Y |
Year | ± 9.2e18 years | [9.2e18 BC, 9.2e18 AD] |
M |
Month | ± 7.6e17 years | [7.6e17 BC, 7.6e17 AD] |
W |
Week | ± 1.7e17 years | [1.7e17 BC, 1.7e17 AD] |
D |
Day | ± 2.5e16 years | [2.5e16 BC, 2.5e16 AD] |
h |
Hour | ± 1.0e15 years | [1.0e15 BC, 1.0e15 AD] |
m |
Minute | ± 1.7e13 years | [1.7e13 BC, 1.7e13 AD] |
s |
Second | ± 2.9e12 years | [ 2.9e9 BC, 2.9e9 AD] |
ms |
Millisecond | ± 2.9e9 years | [ 2.9e6 BC, 2.9e6 AD] |
us |
Microsecond | ± 2.9e6 years | [290301 BC, 294241 AD] |
ns |
Nanosecond | ± 292 years | [ 1678 AD, 2262 AD] |
ps |
Picosecond | ± 106 days | [ 1969 AD, 1970 AD] |
fs |
Femtosecond | ± 2.6 hours | [ 1969 AD, 1970 AD] |
as |
Attosecond | ± 9.2 seconds | [ 1969 AD, 1970 AD] |
np.datetime64('2015-07-04 12:59:59.50', 'ns')
pandas处理时间两全其美的办法
pandas中提供了timestamp
对象,本质上是将基础的datetime和dateutil实现了numpy.datetime64的接口。
import pandas as pd
date = pd.to_datetime("4th of July, 2015")
date
解析到天
date + pd.to_timedelta(np.arange(12), 'D')
pandas中的时间索引
用时间来做索引是处理数据中常见的操作。
index = pd.DatetimeIndex(['2014-07-04', '2014-08-04',
'2015-07-04', '2015-08-04'])
data = pd.Series([0, 1, 2, 3], index=index)
python中的时间结构
- 对于时间戳,panda提供时间戳类型。如前所述,它本质上是Python原生datetime的替代品,但它基于更高效的numpy。datetime64数据类型。关联的索引结构是DatetimeIndex。
- 对于时间段,panda提供了时间段类型。这将编码一个基于numpy.datetime64的固定频率间隔。关联的索引结构是PeriodIndex。
- 对于时间增量或持续时间,panda提供了时间增量类型。Timedelta是Python原生datetime的更有效替代品。类型,并基于numpy .timedelta64。关联的索引结构是TimedeltaIndex。
-
时间戳:
dates = pd.to_datetime([datetime(2015, 7, 3), '4th of July, 2015',
'2015-Jul-6', '07-07-2015', '20150708'])
dates -
时间段 :
dates.to_period('D') -
时间增量:
dates - dates[0]
pd.date_range()产生时间数组
pd.date_range('2015-07-03', '2015-07-10')
pd.period_range('2015-07', periods=8, freq='M')
pd.timedelta_range(0, periods=10, freq='H')
重采样 移动 窗口滚动
from pandas_datareader import data
goog = data.DataReader('GOOG', start='2004', end='2016',
data_source='google')
goog.head()
时间重采样:
reshape()
asfreq()
移动预测:
shift()
tshift()``=time-shift
shift用来移动日期。tshift()移动索引。
滚动窗口:
滚动窗口滚动统计是ppython实现的第三种特定于时间序列的操作。这可以通过Series和DataFrame对象的rolling()属性来实现,该属性返回一个与groupby操作类似的视图(参见聚合和分组)。默认情况下,这个滚动视图提供了许多聚合操作。随着时间变化变化的统计指标。
rolling()
可以获得一些聚合操作的对象
rolling.mean()
rolling.std()
网友评论