1.datetime 模块操作时间
strptime = datetime.strptime('2020-01-01', '%Y-%m-%d')
print(strptime, type(strptime)) # 2020-01-01 00:00:00 <class 'datetime.datetime'>
如果时间变成了 2020/01/01,这时后面的格式得手动改成 %Y/%m/%d
2.dateutil 操作时间
parse = dateutil.parser.parse('2020-01-01')
# parse = dateutil.parser.parse('01/02/2020')
# parse = dateutil.parser.parse('Feb/02/2020')
print(parse, type(parse))
用这个模块处理时间,就无需自己去写时间的格式了,引入 pandas 模块后,这个模块会同时被引用进来,因为 pandas 也会用到这个库。
3.创建时间类型索引
# 方法一
datetime = pd.to_datetime(['2020-01-01', '2020-01-02', '2020-01-03'])
print(datetime) # DatetimeIndex(['2020-01-01', '2020-01-02', '2020-01-03'], dtype='datetime64[ns]', freq=None)
# 方法二
date_range = pd.date_range(start='1/1/2018', end='1/08/2018')
date_range = pd.date_range(start='1/1/2018', end='1/08/2018', freq='H') # 默认按天,设置频率按小时
# 还可以设置为 D(天),M(月),3M(3个月)
date_range = pd.date_range(start='1/1/2018', periods=3) # 默认按天,从start开始往后3天,如果设置end,则是往前3天
# freq:时间频率,默认为D,可选 H小时,W周,B工作日,SM半月,T分钟,S秒,A年
date_range = pd.date_range(start='2018-01-01', periods=20, freq='W') # 按周输出,默认输出每个周日,W-SUN,如果想按周一输出,freq='W-MON'
date_range = pd.date_range(start='2018-01-01', periods=20, freq='B') # 按周输出,只输出工作日,business
print(date_range)
# 转成 python 的 datetime
print(type(date_range[0]), type(date_range[0].to_pydatetime())) # <class 'pandas._libs.tslibs.timestamps.Timestamp'> <class 'datetime.datetime'>
4.pandas时间序列用法
时间序列就是以时间对象为索引的Series或DataFrame,类型为 DatetimeIndex。
时间序列有什么用处:
- 可传入年或年月作为切片方式
- 可传入日期范围作为切片方式
- 丰富的函数支持,resample(),truncate()
切片
sr = pd.Series(np.arange(1000), index = pd.date_range('2017-01-01', periods = 1000))
sr['2017'] # 所有2017年的
sr['2017':'2018-03']
sr['2017-12-25':'2018-02-01']
resample
sr.resample('M').sum() # 按月来分组,并计算每月数据的和
truncate
sr.truncate(before='2018-01-03') # 只留下2018-01-03之后的数据
因为有切片了,所以这个函数意义不大,如果想留下两边的,去掉中间的,切片要切两次,用这个函数可以只执行一次