我要将股票数据从alpaca_trade_api转换为熊猫 python的数据框。
{'AAPL': [Bar({ 'c': 204.25,'h': 205.08,'l': 202.9,'o': 203.35,'t': 1562299200,'v': 14933941}),
Bar({ 'c': 200.01,'h': 201.4,'l': 198.41,'o': 200.81,'t': 1562558400,'v': 21987224})]}
我可以使用第一个字典,并将数据仅保留到数据的Bar部分中,但是我不知道如何删除该部分。
import alpaca_trade_api as tradeapi
import pandas as pd
bar= api.get_barset('AAPL', 'day', limit=2)
df=pd.DataFrame.from_dict(bar)
print(df)
此过程的打印输出如下。我不确定如何从数据集中删除Bar(),以便可以公开下一个字典。我认为对于下一个字典,我只能使用DataFram.from_dict()删除它。
AAPL
0 Bar({ 'c': 204.25,\n 'h': 205.08,\n 'l...
1 Bar({ 'c': 200.01,\n 'h': 201.4,\n 'l'...
我希望我的数据最后看起来像这样:
c h l o t v
bar1 204.25 205.08 202.9 203.35 1562299200 14933941
bar2 200.01 201.4 198.41 200.81 1562558400 21987224
任何人和所有帮助将不胜感激。 抱歉,如果缺少某些东西。这是第一号。 谢谢您的帮助!
答案 0 :(得分:1)
这个问题有两个答案。
import alpaca_trade_api as tradeapi #see https://alpaca.markets/
import pandas as pd
api = tradeapi.REST(key_id, secret_key, base_url)
symbol = 'AAPL'
bar= api.get_barset(symbol, 'day', limit=60).df
import alpaca_trade_api as tradeapi #see https://alpaca.markets/
import pandas as pd
api = tradeapi.REST(key_id, secret_key, base_url)
symbol = 'AAPL'
bar= api.get_barset(symbol, 'day', limit=60)
c = []
h = []
l = []
o = []
t = []
v = []
idx = []
i = 0
for i in range(len(bar[symbol])):
temp_c = c.append(bar[symbol][i].c)
temp_h = h.append(bar[symbol][i].h)
temp_l = l.append(bar[symbol][i].l)
temp_o = o.append(bar[symbol][i].o)
temp_t = t.append(bar[symbol][i].t)
temp_v = v.append(bar[symbol][i].v)
temp_idx = idx.append(i)
i = i + 1
df_bar_t = pd.DataFrame(t, idx,columns = ['Datetime'])
df_bar_c = pd.DataFrame(c, idx, columns = ['Close'])
df_bar_h = pd.DataFrame(h, idx, columns = ['High'])
df_bar_l = pd.DataFrame(l, idx, columns = ['Low'])
df_bar_o = pd.DataFrame(o, idx, columns = ['Open'])
df_bar_v = pd.DataFrame(v, idx, columns = ['Volume'])
mdf1 = pd.merge(df_bar_t,df_bar_c, left_index = True, right_index = True)
mdf2 = pd.merge(mdf1,df_bar_h, left_index = True, right_index = True )
mdf3 = pd.merge(mdf2,df_bar_l, left_index = True, right_index = True )
mdf4 = pd.merge(mdf3,df_bar_o, left_index = True, right_index = True )
mdf4 = pd.merge(mdf4,df_bar_v, left_index = True, right_index = True )
答案 1 :(得分:0)
羊驼还很新,很不幸,它没有最具解释性的文档。首先,alpaca_trade_api.get_barset
的结果是BarSet
。 是.df
的{{1}}属性,但是BarSet
本身或BarSet
都不能直接访问原始结果。>
深入研究API df
的源代码(可以在here找到),我们可以看到两件事:
BarSet
是BarSet
的子类dict
具有BarSet
属性我们可以使用此_raw
属性来访问原始数据,即_raw
。
dict
哪个输出:
symbol = "AAPL"
bar_set = api.get_barset(symbol, "day", limit=5)._raw
因此,如果要使用原始值创建{
'AAPL': [
{'t': 1607317200, 'o': 122.31, 'h': 124.57, 'l': 122.25, 'c': 123.8, 'v': 72463180},
{'t': 1607403600, 'o': 124.37, 'h': 124.98, 'l': 123.09, 'c': 124.33, 'v': 69695298},
{'t': 1607490000, 'o': 124.53, 'h': 125.95, 'l': 121, 'c': 121.67, 'v': 99218318},
{'t': 1607576400, 'o': 120.5, 'h': 123.87, 'l': 120.15, 'c': 123.22, 'v': 70011939},
{'t': 1607662800, 'o': 122.43, 'h': 122.76, 'l': 120.55, 'c': 122.49, 'v': 75289233}
]
}
,则可以执行以下操作:
pandas.DataFrame
这给我们:
import pandas as pd
symbol = "AAPL"
bar_set = api.get_barset(symbol, "day", limit=5)[symbol]._raw
df = pd.DataFrame(data=bar_set)