如何通过Binance API获取K线数据并转换为Pandas DataFrame?
问题确认:Binance 1分钟K线数据转Pandas DataFrame代码是否正确?
以下是实现从Binance获取K线数据并转换为Pandas DataFrame的代码,注释已译为中文:
from binance.client import Client import pandas as pd # Binance API信息 api_key = 'hidden' api_secret = 'hidden' # 连接Binance客户端 client = Client(api_key, api_secret) # 获取K线/蜡烛图数据 candles = client.get_klines(symbol='BTCUSDT', interval=Client.KLINE_INTERVAL_1MINUTE) # 创建K线数据的DataFrame candles_dataframe = pd.DataFrame(columns= ['Open time', 'Open', 'High', 'Low', 'Close', 'Volume', 'Close time', 'Quote asset volume', 'Number of trades', 'Taker buy base asset volume', 'Taker buy quote asset volume', 'Ignore'])技术问询:请确认上述代码是否正确实现了从Binance获取BTCUSDT 1分钟K线数据并转换为Pandas DataFrame的功能?
代码问题分析与修正
你的代码前半部分逻辑是对的:成功初始化了Binance客户端,也调用get_klines接口拿到了BTCUSDT的1分钟K线数据,但最后一步创建DataFrame的环节有明显疏漏——你只定义了列名,却没有把获取到的candles数据集传入DataFrame,最终得到的会是一个完全空的DataFrame,等于白拿了K线数据。
修正后的完整可用代码
from binance.client import Client import pandas as pd # Binance API信息 api_key = 'hidden' api_secret = 'hidden' # 连接Binance客户端 client = Client(api_key, api_secret) # 获取K线/蜡烛图数据 candles = client.get_klines(symbol='BTCUSDT', interval=Client.KLINE_INTERVAL_1MINUTE) # 创建K线数据的DataFrame:传入candles数据并指定列名 candles_dataframe = pd.DataFrame( candles, columns=[ 'Open time', 'Open', 'High', 'Low', 'Close', 'Volume', 'Close time', 'Quote asset volume', 'Number of trades', 'Taker buy base asset volume', 'Taker buy quote asset volume', 'Ignore' ] ) # 可选优化:将毫秒级时间戳转换为可读的日期时间格式 candles_dataframe['Open time'] = pd.to_datetime(candles_dataframe['Open time'], unit='ms') candles_dataframe['Close time'] = pd.to_datetime(candles_dataframe['Close time'], unit='ms') # 可选优化:将字符串格式的数值列转换为float类型(Binance返回的原始数据是字符串) numeric_columns = ['Open', 'High', 'Low', 'Close', 'Volume', 'Quote asset volume', 'Taker buy base asset volume', 'Taker buy quote asset volume'] candles_dataframe[numeric_columns] = candles_dataframe[numeric_columns].astype(float)
关键修正说明
- 核心修复:必须把
candles作为第一个参数传入pd.DataFrame(),否则DataFrame无法加载获取到的K线数据 - 时间格式转换:Binance返回的时间戳是毫秒级整数,转成
datetime格式后更便于后续时间维度的分析 - 数值类型转换:原始返回的价格、成交量等字段是字符串类型,转换成
float才能进行计算、绘图等操作
修改后,代码就能正确完成「获取1分钟K线数据并转换为可用Pandas DataFrame」的需求了。
内容的提问来源于stack exchange,提问作者Myron
相关产品推荐
相关产品推荐

