You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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(开盘价):取每组第一条交易的price
  • h(最高价):取每组price的最大值
  • l(最低价):取每组price的最小值
  • c(收盘价):取每组最后一条交易的price
  • v(成交量):取每组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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 23:55:32