Python将Kraken 1分钟历史交易CSV转换为OHLCV格式求助
解决Kraken交易数据转OHLCV格式问题
1. 先修复数据类型问题
首先必须保证datetime列是Pandas的时间类型,否则resample会完全失效,直接导致o、h、l字段出现NaN。读取CSV时可以直接指定解析时间列:
import pandas as pd # 读取CSV并自动解析datetime列 df = pd.read_csv('kraken_trades.csv', parse_dates=['datetime'], index_col=False)
如果已经读入数据,也可以手动转换时间格式:
df['datetime'] = pd.to_datetime(df['datetime'])
2. 正确使用resample生成OHLCV
resample需要按时间分组,同时为每个字段指定对应的聚合逻辑:
o(开盘价):取每组第一条交易的priceh(最高价):取每组price的最大值l(最低价):取每组price的最小值c(收盘价):取每组最后一条交易的pricev(成交量):取每组volume的总和
代码示例:
# 临时将datetime设为索引,方便按时间重采样 ohlcv = df.set_index('datetime').resample('1min').agg({ 'price': ['first', 'max', 'min', 'last'], 'volume': 'sum' }) # 合并多级列名,重命名为目标字段 ohlcv.columns = ['o', 'h', 'l', 'c', 'v']
3. 将时间索引转为独立列t
通过重置索引,把时间从索引转换为普通列,再重命名为t:
ohlcv = ohlcv.reset_index().rename(columns={'datetime': 't'})
4. 处理空值(可选)
如果某些1分钟区间没有交易数据,会出现NaN,可以根据需求填充:
# 用前一分钟收盘价填充开盘/收盘价,高低价同步为前收盘价,成交量填0 ohlcv['o'] = ohlcv['o'].fillna(method='ffill') ohlcv['h'] = ohlcv['h'].fillna(ohlcv['o']) ohlcv['l'] = ohlcv['l'].fillna(ohlcv['o']) ohlcv['c'] = ohlcv['c'].fillna(method='ffill') ohlcv['v'] = ohlcv['v'].fillna(0)
完整代码示例
import pandas as pd # 读取并预处理数据 df = pd.read_csv('kraken_trades.csv', parse_dates=['datetime']) df['datetime'] = pd.to_datetime(df['datetime']) # 确保时间格式正确 # 生成OHLCV数据 ohlcv = df.set_index('datetime').resample('1min').agg({ 'price': ['first', 'max', 'min', 'last'], 'volume': 'sum' }) ohlcv.columns = ['o', 'h', 'l', 'c', 'v'] # 转换时间列为独立字段 ohlcv = ohlcv.reset_index().rename(columns={'datetime': 't'}) # 填充空值 ohlcv.fillna({ 'o': ohlcv['o'].ffill(), 'h': ohlcv['h'].fillna(ohlcv['o']), 'l': ohlcv['l'].fillna(ohlcv['o']), 'c': ohlcv['c'].ffill(), 'v': 0 }, inplace=True) # 查看结果 print(ohlcv.head())
内容的提问来源于stack exchange,提问作者Bread Bread
相关产品推荐
相关产品推荐

