我有一个脚本可以从 excel 文件中提取数据框。 我想以这样一种方式运行 for 循环,即循环输出的最后一个值保存在单独的数据帧中。
如何实现?
# Import libraries & activate
from nsepy.history import get_history
from pynse import *
import datetime as dt
import pandas as pd
import xlwings as xw
nse = Nse()
wb = xw.Book("Marketwatch.xlsm")
ws = wb.sheets("Sectoral Data")
_Indices = ws.range("AM1").expand().options(pd.DataFrame).value.reset_index()
_stocks = ws.range("AM21").expand().options(pd.DataFrame).value.reset_index()
for i in _Indices["Symbol"]:
en = dt.date.today()
st = en - dt.timedelta(days=700)
i = (
nse.get_hist(i, from_date=st, to_date=en)
.drop(["Open", "High", "Low", "SharesTraded"], axis=1)
.reset_index()
)
i.insert(1, "Symbol", i)
i["5dma"] = i["Close"].rolling(window=5).mean()
i["13dma"] = i["Close"].rolling(window=13).mean()
i["20dma"] = i["Close"].rolling(window=20).mean()
i["50dma"] = i["Close"].rolling(window=50).mean()
i["100dma"] = i["Close"].rolling(window=5).mean()
i["200dma"] = i["Close"].rolling(window=5).mean()
i["5drtn"] = (i["Close"] - i["Close"].shift(4)) * 100 / i["Close"].shift(4)
i["10drtn"] = (i["Close"] - i["Close"].shift(9)) * 100 / i["Close"].shift(9)
i["1mortn"] = (i["Close"] - i["Close"].shift(29)) * 100 / i["Close"].shift(29)
i["3mortn"] = (i["Close"] - i["Close"].shift(89)) * 100 / i["Close"].shift(89)
i["6mortn"] = (i["Close"] - i["Close"].shift(179)) * 100 / i["Close"].shift(179)
i["1yrtn"] = (i["Close"] - i["Close"].shift(364)) * 100 / i["Close"].shift(364)
print(i.tail(1))
答案 0 :(得分:0)
通过添加一个空数据框并将 for 循环的输出附加到循环外创建的数据框,能够解决该问题。 最终代码在这里
# Import libraries & activate
from nsepy.history import get_history
from pynse import *
import datetime as dt
import pandas as pd
import xlwings as xw
nse = Nse()
wb = xw.Book("Marketwatch.xlsm")
ws = wb.sheets("Sectoral Data")
_Indices = ws.range("AJ1").expand().options(pd.DataFrame).value.reset_index()
_stocks = ws.range("AJ21").expand().options(pd.DataFrame).value.reset_index()
data = pd.DataFrame()
for i in _Indices["Symbol"]:
en = dt.date.today()
st = en - dt.timedelta(days=700)
df = nse.get_hist(i, from_date=st, to_date=en).drop(["Open", "High", "Low", "SharesTraded"], axis=1)
df.insert(0, "Symbol", i)
df["5dma"] = df["Close"].rolling(window=5).mean()
df["13dma"] = df["Close"].rolling(window=13).mean()
df["20dma"] = df["Close"].rolling(window=20).mean()
df["50dma"] = df["Close"].rolling(window=50).mean()
df["100dma"] = df["Close"].rolling(window=100).mean()
df["200dma"] = df["Close"].rolling(window=200).mean()
df["5drtn"] = (df["Close"] - df["Close"].shift(4)) * 100 / df["Close"].shift(4)
df["10drtn"] = (df["Close"] - df["Close"].shift(9)) * 100 / df["Close"].shift(9)
df["1mortn"] = (df["Close"] - df["Close"].shift(29)) * 100 / df["Close"].shift(29)
df["3mortn"] = (df["Close"] - df["Close"].shift(89)) * 100 / df["Close"].shift(89)
df["6mortn"] = (df["Close"] - df["Close"].shift(179)) * 100 / df["Close"].shift(179)
df["1yrtn"] = (df["Close"] - df["Close"].shift(364)) * 100 / df["Close"].shift(364)
data = data.append(df.tail(1), ignore_index=True)
print(data)