将多个下载的时间序列共享转换为pandas数据框架



我使用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

然后输出如下所示: