从对象列表中获取值到可读数据框中的问题
Issue With Getting Values from a List of Objects into a Readable Dataframe
过去几天我一直在 运行 解决同样的问题,谷歌搜索所有内容并在这个论坛上搜索答案,但我尝试的任何事情似乎都不起作用。我一直在关注其他人发布的教程,他们能够非常简单地做到这一点,但是当我从多个角度尝试时,我 运行 遇到了多个问题。我的头脑被我尝试过的所有事情弄得一头雾水,以至于我什至不确定发生了什么或我做了什么。这不是所有代码,但这应该是唯一相关的代码,因为其他部分执行其他功能,但如果我遗漏了任何内容,我深表歉意。
基本上,我从网站上获取历史金融烛台数据,试图将其放入 Pandas 数据框,然后使用该数据框通过 Plotly 制作图表。我得到的数据是 'result',PyCharm 将数据很好地输出到 'Run' 框中,但现在我需要保存该数据,所以我 Pandas 转 'result' 转换为 'priceData' 数据帧,并将其转换为 'pricedata.csv'。当我打开那个 CSV 文件时,我得到的只是一个从 0 到 1439 的列表(我一次导入 1440 个 1 分钟的烛台),每个烛台只显示对象引用( ,或类似的)。这显然不是我想要的,我需要烛台内的数据,它应该由 12 条数据组成(开盘时间、开盘价、最低价、收盘价、最高价等)。当图表函数 运行s 返回时,它返回“AttributeError:'DataFrame' 对象没有属性 'high'”,我认为这是因为它正在访问烛台对象 ID 而不是值。
我可以通过深入获取特定值,并调用它来保存结果[0].high 或 result[0].low 等。但是我必须遍历 1440 个烛台data 和 write/save 它们全部分开,然后将它们每个的 high/low/open/close/time/etc 汇集在一起以便能够绘制,这比我看过的教程做的要复杂得多。他们能够毫不费力地立即使用数据框进行绘图,他们不会 运行 进入属性错误,就像它只是为他们正确识别列一样。但是当我查看 '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
。听起来您想解压所有这些属性并将它们放入 DataFrame 中。
To obtain all of the attributes of an object,比如字典中Candlestick对象的所有12个属性,可以使用result[0].__dict__
which returns: {'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
允许您从这样的字典列表中构造一个 DataFrame所以 priceData = pd.DataFrame([candlestick_obj.__dict__ for candlestick_obj in result])
将创建一个 DataFrame,其中包含每个字典中的键的列,每个列表项有 1 行。
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
您的其余代码没有问题,您的图表函数按预期生成了烛台图表。
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()
过去几天我一直在 运行 解决同样的问题,谷歌搜索所有内容并在这个论坛上搜索答案,但我尝试的任何事情似乎都不起作用。我一直在关注其他人发布的教程,他们能够非常简单地做到这一点,但是当我从多个角度尝试时,我 运行 遇到了多个问题。我的头脑被我尝试过的所有事情弄得一头雾水,以至于我什至不确定发生了什么或我做了什么。这不是所有代码,但这应该是唯一相关的代码,因为其他部分执行其他功能,但如果我遗漏了任何内容,我深表歉意。
基本上,我从网站上获取历史金融烛台数据,试图将其放入 Pandas 数据框,然后使用该数据框通过 Plotly 制作图表。我得到的数据是 'result',PyCharm 将数据很好地输出到 'Run' 框中,但现在我需要保存该数据,所以我 Pandas 转 'result' 转换为 'priceData' 数据帧,并将其转换为 'pricedata.csv'。当我打开那个 CSV 文件时,我得到的只是一个从 0 到 1439 的列表(我一次导入 1440 个 1 分钟的烛台),每个烛台只显示对象引用(
我可以通过深入获取特定值,并调用它来保存结果[0].high 或 result[0].low 等。但是我必须遍历 1440 个烛台data 和 write/save 它们全部分开,然后将它们每个的 high/low/open/close/time/etc 汇集在一起以便能够绘制,这比我看过的教程做的要复杂得多。他们能够毫不费力地立即使用数据框进行绘图,他们不会 运行 进入属性错误,就像它只是为他们正确识别列一样。但是当我查看 '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
。听起来您想解压所有这些属性并将它们放入 DataFrame 中。
To obtain all of the attributes of an object,比如字典中Candlestick对象的所有12个属性,可以使用result[0].__dict__
which returns: {'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
允许您从这样的字典列表中构造一个 DataFrame所以 priceData = pd.DataFrame([candlestick_obj.__dict__ for candlestick_obj in result])
将创建一个 DataFrame,其中包含每个字典中的键的列,每个列表项有 1 行。
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
您的其余代码没有问题,您的图表函数按预期生成了烛台图表。
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()