我使用nsepy库下载了近10天的多个共享信息,但无法保存在pandas数据框中。
以下代码下载多个共享数据:
import datetime
from datetime import date
from nsepy import get_history
import pandas as pd
symbol=['SBIN','GAIL','NATIONALUM' ]
data={}
for s in symbol:
data[s]=get_history(s,start=date(2022, 11, 29),end=date(2022, 12, 12))
下面的代码使用转换数据到pd数据帧,但我得到错误
new = pd.DataFrame(data, index=[0])
new
错误信息:
ValueError: Shape of passed values is (14, 3), indices imply (1, 3)
get_history
的文档说明:
Returns:
pandas.DataFrame : A pandas dataframe object
因此,data是一个以符号为键和pd为键的字典。作为值的数据框架。然后,您试图将一个数据框插入到另一个数据框中,这不起作用。如果您想从3个现有的数据框架中创建一个新的MultiIndex数据框架,您可以这样做:
result = {}
for df, symbol in zip(data.values(), data.keys()):
data = df.to_dict()
for key, value in data.items():
result[(symbol, key)] = value
df_multi = pd.DataFrame(result)
df_multi.columns
结果(每个Symbol只显示两列,以澄清Multiindex结构)
MultiIndex([( 'SBIN', 'Symbol'),
( 'SBIN', 'Series'),
( 'GAIL', 'Symbol'),
( 'GAIL', 'Series'),
('NATIONALUM', 'Symbol'),
('NATIONALUM', 'Series')
编辑
所以如果你只想要一个单独的索引DF,就像你附加的文件中的符号在一列中,你可以简单地这样做:
new_df = pd.DataFrame()
for symbol in data:
# sequentally concat the DataFrames from your dict of DataFrames
new_df = pd.concat([data[symbol], new_df],axis=0)
new_df
然后输出如下所示: