在过去的几天里,我一直遇到同样的问题,在这个论坛上搜索所有的东西,寻找答案,但我所尝试的一切似乎都不起作用。我一直在关注其他人发布的教程,他们可以很简单地做到这一点,但当我从多个角度尝试时,我遇到了多个问题。我的脑袋被我尝试过的所有事情弄得乱七八糟,我甚至都不知道发生了什么或者我做了什么。这不是全部代码,但这应该是唯一相关的代码,因为其他部分执行其他功能,但是如果我遗漏了任何内容,我很抱歉
基本上,我从一个网站上获取历史金融烛台数据,试图将其放入熊猫数据框中,然后使用该数据框用Plotly制作图表。我以“结果”的形式获取数据,PyCharm将数据很好地输出到“运行”框中,但现在我需要保存该数据,因此我必须将“结果”转换为数据帧作为“priceData”,并将其转换为“priceData.csv”。打开该CSV文件时,我得到的只是一个从0到1439的列表(我一次导入1440个1分钟烛台),每个烛台仅显示对象引用(<;binance_f.model.candlestick.candlestick object at 0x0D55EF50>;,或类似)。这显然不是我想要的,我需要烛台中的数据,它应该由12条数据组成(打开时间、打开、低、关闭、高等等)。当图表函数运行时,它返回“AttributeError:‘DataFrame’object没有属性‘high’”,我认为这是因为它正在访问烛台对象ID,而不是值
我可以通过深入并调用它来保存结果[0].high或结果[0].low等来获得具体的值。但是我必须迭代1440个烛台的数据,并分别写入/保存它们,然后将它们的高/低/打开/关闭/时间等集合起来,以便能够绘制,这比我看过的教程要复杂得多。他们可以直接使用数据框进行绘图,没有任何问题,他们不会遇到属性错误,就像它只是为他们正确地识别列一样。但当我看“result”的列时,有1440列(每个烛台也有一列),但我认为应该是12列,每个烛台由12个不同的数据位组成。我尝试过转换列和行,但也不起作用
即使我试图通过指定“result[0]”而不指定.high/.low/etc来获取一个对象的整个烛台数据,我也会遇到相同的属性错误。建议使用一些方法来指定列是什么,这就是散列的“priceData.columns”的用途,在这里我确定了每个列是什么。但我得到了“长度不匹配:预期轴有1440个元素,新值有12个元素”
在这一点上,我真的很困惑,在兜圈子,有人能帮我指出正确的方向,告诉我我搞砸了什么吗?提前感谢所有花时间阅读本文的人,或者他们可以提供任何指导的人
from binance_f import RequestClient
from binance_f.model import *
from binance_f.constant.test import *
from binance_f.base.printobject import *
import pandas as pd
import numpy as np
import json
import plotly.io as pio
pd.options.plotting.backend = 'plotly'
pio.renderers.default = "browser"
request_client = RequestClient(api_key=g_api_key, secret_key=g_secret_key, url="https://fapi.binance.com")
result = request_client.get_candlestick_data(symbol="BTCUSDT", interval=CandlestickInterval.MIN1,
startTime=1609473600000, endTime=None, limit=1440)
priceData = pd.DataFrame([result])
priceData.to_csv('priceData.csv')
print(pd.read_csv("E:\Creative\GitHub Projects\Binance_Futures_python\example\market\priceData.csv"))
#priceData.columns = ['opentime', 'open', 'high', 'low', 'close', 'vol', 'closetime', 'quoteassetvol', #'numberoftrades','takerbuybase', 'takerbuyquote', 'ignore']
def chart():
pricedata = pd.read_csv('E:\Creative\GitHub
Projects\Binance_Futures_python\example\market\priceData.csv')
highprice = pricedata.high
lowprice = pricedata.low
openprice = pricedata.open
closeprice = pricedata.close
fig = dict({
"data": [{"type": "candlestick",
"open": [openprice],
"close": [closeprice],
"low": [lowprice],
"high": [highprice]}],
"layout": {"title": {"text": "Candlestick Charts"}}
})
pio.show(fig)
chart()
当前获取烛台数据的方式,
result
是烛台对象的列表,每个对象都有可以单独访问的属性,如您指出的result[0].high
。听起来好像您想要解包所有这些属性并将它们放入数据帧中To obtain all of the attributes of an object,例如字典中烛台对象的所有12个属性,可以使用
result[0].__dict__
返回:{'openTime': 1609473600000, 'open': '29302.11', 'high': '29356.04', 'low': '29302.10', 'close': '29344.00', 'volume': '170.018', 'closeTime': 1609473659999, 'quoteAssetVolume': '4988200.62513', 'numTrades': 1045, 'takerBuyBaseAssetVolume': '139.291', 'takerBuyQuoteAssetVolume': '4086412.01157', 'ignore': '0'}
要从
result
获取这些词典的列表,可以使用列表理解:[candlestick_obj.__dict__ for candlestick_obj in result]
,并且pd.DataFrame
允许您从这样的词典列表中构造一个数据框架,以便priceData = pd.DataFrame([candlestick_obj.__dict__ for candlestick_obj in result])
将创建一个数据框架,其中每个词典中的键都有列,每个列表项有一行代码的其余部分很好,chart函数按预期生成烛台图
相关问题 更多 >
编程相关推荐