Python调用Binance API:DataFrame无法正常显示问题排查
问题分析与解决方案
核心问题
你的代码存在三个关键问题:
- 函数无返回值,导致DataFrame创建失败:
get_volume函数没有return语句,调用时默认返回None,所以print(get_volume('BTC'))会输出None,且pd.DataFrame(get_volume('BTC'))传入None无法生成有效表格。 - 交易量计算错误:循环K线时仅将最后一根K线的交易量赋值给变量,得到的是单根K线的交易量,而非一天内所有5/15分钟K线的总交易量。
- 变量作用域不合理:交易量变量定义在函数开头,未在每个交易对处理时重新初始化,存在数值残留的潜在风险。
修正后的代码
import pandas as pd from binance.client import Client def get_volume(symbol): volume_data = [] prices = client.get_all_tickers() for coin in prices: if coin['symbol'].startswith(symbol) and coin['symbol'].endswith('USDT'): # 每个交易对独立初始化交易量变量 total_15m = 0 total_5m = 0 # 累加15分钟K线总交易量 klines_15m = client.get_historical_klines(coin['symbol'], Client.KLINE_INTERVAL_15MINUTE, "1 day ago") for kline in klines_15m: total_15m += float(kline[5]) # 累加5分钟K线总交易量 klines_5m = client.get_historical_klines(coin['symbol'], Client.KLINE_INTERVAL_5MINUTE, "1 day ago") for kline in klines_5m: total_5m += float(kline[5]) # 收集当前交易对数据 volume_data.append({ '交易对': coin['symbol'], '15分钟总交易量': total_15m, '5分钟总交易量': total_5m }) print(coin['symbol'], total_15m, total_5m) return volume_data # 生成DataFrame result_list = get_volume('BTC') df = pd.DataFrame(result_list) print(df)
修正说明
- 添加返回值:用列表
volume_data收集所有交易对的结构化数据,函数返回该列表后可直接传入pd.DataFrame()生成表格。 - 累加总交易量:将赋值语句
=改为累加+=,实现所有K线交易量的求和。 - 调整变量作用域:将交易量变量移至交易对循环内部,确保每个交易对的计算独立初始化。
- 简化条件判断:去掉冗余的
== True,代码更简洁符合Python风格。
内容的提问来源于stack exchange,提问作者Jonavagary
相关产品推荐
相关产品推荐

