Python标准库包含用于日期(date)和时间(time)数据的数据类型,而且还有日历方面的功能。
1.获取当前时间
from datetime import datetime
# 获取当前的时间
now = datetime.now()
now
#结果: datetime.datetime(2018, 8, 6, 22, 11, 47, 600118)
2.datetime以毫秒形式储存日期和时间.datetime.timedelta表示两个datetime对象之间的时间差.
delta = datetime(2018,8,6) - datetime(2017,8,6,12,0)
delta
#结果------datetime.timedelta(364, 43200)
# 获取相差得天数
delta.days#结果---364
# 获得秒数
delta.seconds#结果---43200
3.可以给datetime对象加上或减去一个timedelta,这样就会产生一个新的对象
from datetime import datetime
from datetime import timedelta
start = datetime(2011,1,7)
start+timedelta(12)
#结果------datetime.datetime(2011, 1, 19, 0, 0)
start-2*timedelta(12)
#结果------datetime.datetime(2010, 12, 14, 0, 0)
1.时间日期对象转字符串
date = datetime(2018,8,6)
date
#结果------datetime.datetime(2018, 8, 6, 0, 0)
# 强制转化成字符串
str(date)
#结果------'2018-08-06 00:00:00'
# 格式化转化时间日期类型数据
date.strftime("%Y/%m/%d")
#结果------'2018/08/06'
2.字符串转时间对象
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)]
3.dateutil包里parse方法将字符串转化为日期格式
# 时间日期转化工具
from dateutil.parser import parse
parse("2018-08-06")
#结果-----datetime.datetime(2018, 8, 6, 0, 0)
parse("06/08/2018",dayfirst=False) # dayfirst=True 第一组代表日期,否则代表月份
#结果-----datetime.datetime(2018, 6, 8, 0, 0) 6月8日
parse("Jan 31 1997 10:45 PM")
#结果-----datetime.datetime(1997, 1, 31, 22, 45)
4.to_datetime方法解析日期表达形式
dateStr = ["7/6/2011","8/6/2011"]
pd.to_datetime(dateStr)
#结果-----DatetimeIndex(['2011-07-06', '2011-08-06'], dtype='datetime64[ns]', freq=None)
idx = pd.to_datetime(dateStr+[None])
idx
#结果-----DatetimeIndex(['2011-07-06', '2011-08-06', 'NaT'], dtype='datetime64[ns]', freq=None)
idx[2]
#结果-----NaT
pd.isnull(idx)
#结果-----array([False, False, True])
5.pandas中的时间序列基础
from datetime import datetime
dates = [datetime(2011,1,2),datetime(2011,1,5),datetime(2011,1,7),
datetime(2011,1,8),datetime(2011,1,10),datetime(2011,1,12)]
ts = Series(np.random.randn(6),index=dates)
ts
```
结果
2011-01-02 0.083270
2011-01-05 0.708020
2011-01-07 -1.169787
2011-01-08 -1.797083
2011-01-10 2.148670
2011-01-12 2.527151
dtype: float64
```
stamp = ts.index[2]
stamp
#结果----Timestamp('2011-01-07 00:00:00')
ts[stamp]# 通过时间日期类型得行索引获取对应得value值
#结果----T-1.169786729340476
ts["1/10/2011"]
#结果----T2.1486703146528634
ts["20110110"]
#结果----T2.1486703146528634
# pd.date_range(start,periods=n)
# 从start日期开始,往后推n个周期(1天为一个周期)得时间范围
longer_str = Series(np.random.randn(1000),
index=pd.date_range("1/1/2000",periods=1000))
longer_str.head(10)
longer_str["20000102":"20000107"]# 得到某个时间范围内的value值
longer_str["2000"]# 获取某一年的数据
longer_str["2001-05"]# 获取某一年某一月的数据
'''
pd.date_range(start,end,[periods])
start str 开始日期
edn str 结束日期
periods str 生成时间序列的周期
'''
index = pd.date_range("4/1/2012","6/1/2012") # start + end 组合使用
index#获取中间日期的数据
# start + periods
pd.date_range("4/1/2012",periods=20)