Python 将对象列表中的值获取到可读数据帧时出现问题

Python 将对象列表中的值获取到可读数据帧时出现问题,python,pandas,dataframe,plotly,attributeerror,Python,Pandas,Dataframe,Plotly,Attributeerror,在过去的几天里,我一直遇到同样的问题,在这个论坛上搜索所有的东西,寻找答案,但我所尝试的一切似乎都不起作用。我一直在关注其他人发布的教程,他们可以很简单地做到这一点,但当我从多个角度尝试时,我遇到了多个问题。我的脑袋被我尝试过的所有事情弄得乱七八糟,我甚至都不知道发生了什么或者我做了什么。这不是全部代码,但这应该是唯一相关的代码,因为其他部分执行其他功能,但是如果我遗漏了任何内容,我很抱歉 基本上,我从一个网站上获取历史金融烛台数据,试图将其放入熊猫数据框中,然后使用该数据框用Plotly制作图

在过去的几天里,我一直遇到同样的问题,在这个论坛上搜索所有的东西,寻找答案,但我所尝试的一切似乎都不起作用。我一直在关注其他人发布的教程,他们可以很简单地做到这一点,但当我从多个角度尝试时,我遇到了多个问题。我的脑袋被我尝试过的所有事情弄得乱七八糟,我甚至都不知道发生了什么或者我做了什么。这不是全部代码,但这应该是唯一相关的代码,因为其他部分执行其他功能,但是如果我遗漏了任何内容,我很抱歉

基本上,我从一个网站上获取历史金融烛台数据,试图将其放入熊猫数据框中,然后使用该数据框用Plotly制作图表。我以“结果”的形式获取数据,PyCharm将数据很好地输出到“运行”框中,但现在我需要保存该数据,因此我必须将“结果”转换为数据帧作为“priceData”,并将其转换为“priceData.csv”。当我打开该CSV文件时,我得到的只是一个从0到1439的列表(我一次导入1440个1分钟烛台),每个烛台只显示对象引用(,或类似内容)。这显然不是我想要的,我需要烛台中的数据,它应该由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
。听起来好像您想要解包所有这些属性并将它们放入数据帧中

,例如字典中烛台对象的所有12个属性,您可以使用
result[0]。\uuuu dict\uuuu
返回:
{'openTime':1609473600000,'open':'29302.11','high':'29356.04','low':'29302.10','close':'29344.00','volume':'170.018','closeTime':1609473659999,'quoteasetvolume':'4988200.62513','numTrades':1045,'takerbuybeasetvolume':'139.291','takerbuyquoteasetvolume':'4086412.01157','忽略':'0'

要从
result
中获取这些词典的列表,可以使用列表理解:
[candlestick\u obj.\uu dict\uuuuu for candlestick\u obj in result]
,并且
pd.DataFrame
允许您从这样的词典列表中构建数据框架,以便
priceData=pd.DataFrame([candlestick_obj.\uu dict_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

           openTime      open      high  ...  takerBuyBaseAssetVolume  takerBuyQuoteAssetVolume  ignore
0     1609473600000  29302.11  29356.04  ...                  139.291              4.086412e+06       0
1     1609473660000  29344.00  29369.00  ...                   95.555              2.804598e+06       0
2     1609473720000  29353.57  29356.75  ...                   43.821              1.285575e+06       0
3     1609473780000  29339.05  29340.01  ...                   26.836              7.870962e+05       0
4     1609473840000  29334.63  29334.63  ...                    6.004              1.760785e+05       0
...             ...       ...       ...  ...                      ...                       ...     ...
1435  1609559700000  29357.15  29370.00  ...                   35.133              1.031685e+06       0
1436  1609559760000  29370.00  29380.07  ...                   25.957              7.624015e+05       0
1437  1609559820000  29378.76  29382.00  ...                   20.663              6.070590e+05       0
1438  1609559880000  29371.32  29374.25  ...                   15.185              4.459265e+05       0
1439  1609559940000  29363.07  29364.68  ...                    4.084              1.199246e+05       0
代码的其余部分很好,chart函数按预期生成烛台图

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)

## you want the attributes of the Candlestick object
priceData = pd.DataFrame([candlestick_obj.__dict__ for candlestick_obj in 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('priceData.csv', index_col=0)
    # print(pricedata.head())
    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()