使用从for循环传递的变量名创建对象



我的代码是

import pandas as pd
import yahoo_fin.stock_info as si
data = {'Symbols':  ['ADANIPORTS.NS','ASIANPAINT.NS','AXISBANK.NS','BAJAJ-AUTO.NS','BAJAJFINSV.NS','BAJFINANCE.NS','BHARTIARTL.NS','TCS.NS']}
nifty10= pd.DataFrame(data)
nifty10['Symbols']
for symbol in nifty10['Symbols']:
filename = symbol.strip('.NS') #removing .NS and creating a file name so that I can use symbol as filename
filename = si.get_data(symbol)

最后,我想要4个对象ADANIPORTS、ASIANPAINT、AXISBANK、TCS,其中包含si.get_data.返回的值

我反复遍历符号,并将每个符号名称保存为文件名,以便以后使用。然后我通过API传递Symbol,返回一个具有多行和多列的数据帧。

我想把这个输出存储在一个数据帧中,并用我在最后一行第2行创建的文件名/符号来命名数据帧。

但最后一行的数据帧被保存为文件名,简而言之,python没有采用文件名,在这种情况下,第一行的Adaniport将用于第二行的Asianpaints,依此类推

工作原理-vars()[filename] = si.get_data(symbol)

你可以这样做:

import pandas as pd
import yahoo_fin.stock_info as si
data = {'Symbols':  ['ADANIPORTS.NS','ASIANPAINT.NS','AXISBANK.NS','TCS.NS']}
nifty10= pd.DataFrame(data)
for symbol in nifty10['Symbols']:
filename = symbol.strip('.NS') 
vars()[filename] = si.get_data(symbol)

但我建议把它们放在字典里:

si_data = {}
for symbol in nifty10['Symbols']:
filename = symbol.strip('.NS') 
si_data[filename] = si.get_data(symbol)
si_data['AXISBANK'].head()
open    high    low close   adjclose    volume  ticker
1998-11-27  3.55    3.55    2.71    3.40    0.416105    21000.0 AXISBANK.NS
1998-11-30  3.25    3.30    3.10    3.21    0.392852    132000.0    AXISBANK.NS
1998-12-01  3.29    3.46    3.22    3.39    0.414881    123500.0    AXISBANK.NS
1998-12-02  3.36    3.44    3.32    3.39    0.414881    75500.0 AXISBANK.NS
1998-12-03  3.44    3.49    3.37    3.39    0.414881    102000.0    AXISBANK.NS

最新更新