python程序化 k线指定时间更新_python3数据处理 —— K线周期处理

简介

原始素材为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)

你可能感兴趣的:(python程序化,k线指定时间更新)