调用Binance API获取K线数据导出为CSV文件时报ValueError如何解决
报错原因
你调用pd.read_json()时传入的klines是Binance API返回的嵌套列表类型数据,而read_json()方法仅支持接收JSON字符串、本地JSON文件路径、类文件对象作为入参,不支持直接传入列表,因此触发类型不匹配的报错。
修复方案
- 直接用
pd.DataFrame()构造数据表,同时可以补全Binance K线的固定字段作为表头,方便后续数据处理 - 写入CSV时替换为你自己的本地存储路径即可
修正后的完整代码如下:
from binance.client import Client import config import pandas as pd client = Client(config.apiKey,config.apiSec) print("Logged in") symbol = 'BTCUSDT' klines = client.get_historical_klines(symbol, Client.KLINE_INTERVAL_1WEEK, "1 Jan, 2017") # 构造数据表,匹配Binance接口返回的K线字段顺序 df = pd.DataFrame(klines, columns=[ '开盘时间', '开盘价', '最高价', '最低价', '收盘价', '成交量', '收盘时间', '标的成交额', '成交笔数', '主动买入成交量', '主动买入成交额', '预留字段' ]) # 替换为你自己的实际存储路径,例如r'D:\币圈数据\BTC周线2017至今.csv' df.to_csv(r'你的本地存储路径', index=False, encoding='utf-8-sig')
补充说明:加encoding='utf-8-sig'是为了避免Windows系统下打开CSV出现乱码,加index=False是避免把pandas默认的行序号写入文件。
内容的提问来源于stack exchange,提问作者ananame111
相关产品推荐
相关产品推荐

