简介
原始素材为1分钟周期的k线数据——开高低收量时间
目标是将1分钟周期的K线数据转化为n分钟周期的K线数据
关键步骤
指标处理 → 归纳 → 整理
核心函数pandas.to_datetime
DataFrame.resample
DataFrame.agg
核心步骤说明
k线中的日期数据全部转化为时间格式(timestamp)优点:从txt等文件导入数据后,时间是字符串格式,形式多样,需要统一化
时间格式支持加减运算和布尔运算
时间格式转化日期,小时,星期等数据方便
案例代码
import pandas as pd
# 原始数据 data —— DataFrame格式 其中,timestamp为字符串日期格式 如'2020-05-06 22:21'
# 参数 interval -- str格式,指目标数据的周期,如'5min'
# 参数准备
columns_list = ['open', 'high', 'low', 'close', 'volume']
fun = ['first', 'max', 'min', 'last', 'sum']
sinceTime = '2020-01-04T00:00:00.000Z'
endTime = '2020-05-04T00:00:00.000Z'
# 标准化日期指标
data['timestamp'] = pd.to_datatime(data['timestamp']
# 归纳整理
data_interval = data.resample(rule=interval, on = 'timestamp', base=0, label='left', closed='left').\
agg(dict(zip(columns_list,fun)))
# 规范化处理
data_interval.reset_index(inplace=True)
data_interval.fillna(method='ffill') # 如果是期货数据,则删除非交易时间段数据
# 筛选时间
sinceTime_ = pd.to_datetime(sinceTime, '%Y-%m-%dT%H:%M:%S.%fZ', utc=True)
endTime_ = pd.to_datetime(endTime, '%Y-%m-%dT%H:%M:%S.%fZ', utc=True)
data_interval = data_interval[(data_interval['timestamp'] >= sinceTime_) & (data_interval['timestamp'] <= endTime_)]
附注:三个核心函数介绍
pandas.to_datetime
pandas.to_datetime(arg, errors='raise', utc=None, format=None, unit=None)
# 参数解释
errors: 'raise' 无效的解析将引发异常
'coerce'无效解析将被设置为NaT
'ignore'无效解析将返回输入值
utc: 布尔值,返回utc即协调世界时
format: 字符串格式
unit: 默认值为'ns',精确到微妙,'s'为秒
扩展功能
# 转化为字符串
df['time_str'] = df.timestamp.dt.strftime('%d%m%y %H:%M')
df['month'] = df.timestamp.dt.month
df['year'] = df.timestamp.dt.year
df['hour'] = df.timestamp.dt.hour
df['minute'] = df.timestamp.dt.minute
DataFrame.resample
DataFrame.resample(rule, how=None, on=None, axis=0, fill_method=None, closed=None, label=None, convention='start', kind=None, loffset=None, limit=None, base=0)
# 参数解释
rule: 重采样频率,如'M', '5min', Second(15)
on: 用于采样的数据轴
how: 聚合的方法,例如’mean', 'ohlc', 'np.max'
axis: 采样的坐标轴,横向采样还是纵向采样
fill_method: 如何差值,例如‘ffill', 'bfill'等
closed: 采样时闭合的一端,’right' 或 ‘left'
label: 索引采用左边的时间还是右边的时间
loffset: 标签的时间矫正值(这在切换时区很有用)
limit: 向前或向后填充时,允许填充的最大时期数
kind: 聚合到时期(’period‘)或时间戳(’timestamp),默认聚合到时间序列的索引类型
convention:重采样从低频到高频采用的约定,‘start’ 或者 ‘end’
DataFrame.agg
DataFrame.agg(func, axis=0, *args, **kwargs)
# 参数说明
func:function, str, list 或者 dict
axis:在行或者列上面做聚合
# 举例
df = pd.DataFrame([[1,2,3],
[4,5,6],
[7.8.9],
[np.nan, np.nan, np.nan]],
columns=['A', 'B', 'C'])
df.agg(['sum', 'min'])
df.agg({'A':['sum', 'min'], 'B':['min', 'max']})
df.agg('mean', axis=1)