如何將字串百分比轉換為浮點小數?我寫了這段代碼,當我運行它時,我只得到錯誤,例如“無法將系列轉換為 <class 'int'>”和“TypeError:不支持的運算元型別/:'str'和'int'”有問題的行似乎是“sigma = chain["calls"]['Implied Volatility']”,因為我認為隱含波動率是一個字串,因為它是一個字串,我無法用它進行數學運算。這是我的代碼:
from yahoo_fin import options
from yahoo_fin import stock_info as si
import numpy as np
from scipy.stats import norm
stock = input("Enter stock symbol: Ex:QQQ ") #this is the stock ticker
expiry = input("Enter option expiration: Ex:11/05/2021 ") # date of expiry
options.get_options_chain(stock)
chain = options.get_options_chain(stock,expiry)
si.get_live_price(stock)
chain["calls"]
r = .025 #risk free interest rate
S = si.get_live_price(stock) #current price of the underlying stock
K = chain["calls"].Strike #the strike price of the option
t = float(input("time until expiry in days = ")) #days until expiry
T = t/365 #years until expiry
s = chain["calls"]['Implied Volatility']
sigma = chain["calls"]['Implied Volatility'] #the Implied Volatility
print(sigma)
def blackScholes(r, S, K, T, sigma): #using the Black-Scholes formula
"Calculate BS option price for a call/put"
d1 = (np.log(S/K) (r sigma**2/2)*T)/(sigma*np.sqrt(T))
d2 = d1 - sigma*np.sqrt(T)
try:
price = S*norm.cdf(d1, 0, 1) - K*np.exp(-r*T)*norm.cdf(d2, 0, 1)
#print("Option Delta is: ",norm.cdf(d1, 0, 1))
return price
except:
print("Please confirm all option parameters above!!!")
print("Option Value is: ", round(blackScholes(r, S, K, T, sigma),2))
uj5u.com熱心網友回復:
此代碼不可讀或不可測驗,因為它參考了甚至尚未宣告的變數。
但是,如果您的問題是“如何將字串百分比轉換為浮點小數?” 處理系列時,您可以這樣做:
import pandas
s = pandas.Series(["2%", "2.0%", ".09999%", "100%"]) // example series
s = s.apply(lambda x: float(x[:-1]) / 100)
print(s)
或者在你的情況下:
chain["calls"]["Implied Volatility"] = chain["calls"]["Implied Volatility"].apply(lambda x: float(x[:-1]) / 100)
這段代碼在一個系列上運行pandas.Series.apply并傳入一個函式(lambda x:[code] 指的是一個小的未命名函式,其中 x 是系列中的每個值),它去掉 % 符號,轉換為浮點數,并除以 100。
希望有所幫助(第一個 stackoverflow 答案)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/346214.html
上一篇:如果前面沒有相同字符,則替換字符
