目录
一. Python下的日期格式——Datetime数据及相关转换
1.1 时间格式的转换
1.2 将字符串转化为datetime格式3种方法
二. Pandas下的时间格式
2.1 DatetimeIndex和Timestamp
使用datetime格式列表创建DatetimeIndex
Series创建时参数输入datetime列表,会转化为 DatetimeIndex并以其作为索引
字符串列表转化为DatetimeIndex(pd.to_datetime)
Series. pd.date_range()专门用于生产datetimeIndex
2.2 Period
pd.period_range()
创建period
对比pd.date_range():
period其他操作
2.3 应用举例
三. 时间序列数据的频率调整pandas.DataFrame.resample
可能用到的库:
import numpy as np
import pandas as pd
import datetime
from datetime import datetime
import matplotlib.pyplot as plt
%matplotlib inline
import warnings; warnings.simplefilter('ignore') #忽略可能会出现的警告信息,警告并不是错误,可以忽略;
一. Python下的日期格式——Datetime数据及相关转换
输入时间转化为时间格式的时间:
dt_time = datetime(2019, 6, 18)
dt_time
把时间格式的数据转换成为str格式的数据:
str_time = str(dt_time)
用.strftime()方法可以调整年月日的格式;f是format的意思:
dt_str = '2017-06-18'
dt_time = datetime.strptime(dt_str, '%Y-%m-%d')
print(type(dt_time))
print(dt_time)
from dateutil.parser import parse
dt_str2 = '1-06-2017'
dt_time2 = parse(dt_str2) # 使用参数dayfirst = True时,可以让第一个值为天数
print(type(dt_time2))
print(dt_time2)
str_time = pd.Series(['2017/06/18', '2017/06/19', '2017-06-20', '2017-06-21'])
dt_time = pd.to_datetime(str_time)
dt_time
二. Pandas下的时间格式
--timestamp:pandas 最基本的时间日期对象是TimeStamp,这个对象与 datetime 对象保有高度兼容性,可通过.to_datetime() 函数转换。
--DatetimeIndex: pandas下的时间索引格式;
--pd.date_range() 可用于生成指定长度的 DatetimeIndex。参数可以是起始结束日期,或单给一个日期,加一个时间段参数。日期是包含的。
--Period:时期(period)概念不同于前面的时间戳(timestamp),指的是一个时间段。但在使用上并没有太多不同,pd.Period 类的构造函数仍需要一个时间戳,以及一个 freq 参数。
dates = [datetime(2016, 8, 1), datetime(2016, 8, 2)]
dates = pd.DatetimeIndex(dates) #把python下的datetime转换成为pandas下的时间索引DatatimeIndex;
dates
df = pd.Series(np.random.randn(2), index = dates)
df
date_time = pd.to_datetime(['June 18, 2017', '2016-06-19',
'2016.6.20 ', None])
date_time
dates = pd.date_range('8/1/2014', periods=10) 创建一个连续10天的DatetimeIndex并以其为索引
df = pd.Series(np.random.randn(10), index = dates)
df.head()
pandas.period_range(start=None, end=None, periods=None, freq=None, name=None)
参数:
start : 开始时间,默认无生成期间的左边界
end : 结束边界,默认无生成期间的右边界
periods : 整数,要生成日期的期间数,默认无要生成的期间数
freq : 从 ‘D’、'M'、‘Y’选择,所生成时期的步长,分别为:天、月、年。默认为天
name :名字,默认生成的PeriodIndex没有名字
time_period = pd.period_range('2017-01-01', periods = 12, freq='y') # periods:取多少个 freq:取的单位
time_period
date_range = pd.date_range('2017-01-01', periods = 12, freq='M')
date_range
pd.date_range()和pd.period_range()区别:
1、period_range创建的是PeriodIndex,date_range创建的是DatetimeIndex
2、若是按月生产数据,则period_range只会精确到月。date_range可以精确到月中的某一日
1、time_period是刚刚period生成的时间对象
time_period + 1
所有时间直接+1
import tushare as ts
data = ts.get_k_data('000001', '2015-01-01', '2016-12-30')
data.index = pd.to_datetime(data['date'])
del data['date']
data.head(5)
可以只指定年月索引
data['2016-02'].head()
但是,若选择具体的天数,就会报错
指定具体天数应该使用data.ix['2016-02']
三. 时间序列数据的频率调整pandas.DataFrame.resample
重采样(Resampling)指的是把时间序列的频度变为另一个频度的过程。把高频度的数据变为低频度叫做降采样(downsampling),把低频度变为高频度叫做增采样(upsampling)。
DataFrame.resample(rule, how=None, axis=0, fill_method=None,
closed=None, label=None,
convention='start', kind=None,
loffset=None, limit=None, base=0, on=None, level=None)
详细官网:http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.resample.html
常用:
how : str下采样/重新采样的方法,默认为下采样的“平均值”。
axis : {0 or ‘index’, 1 or ‘columns’}, default 0用于上下采样的轴。对于序列,这将默认为0,即沿行。必须是datetimeindex、timedeltaindex或periodindex。
fill_method : str, default None过采样的填充方法。