如何将字符串百分比转换为浮点数?

How do you convert a string percent to a float decimal?

如何将字符串百分比转换为浮点小数? 我写了这段代码,当我 运行 它时,我只是得到像这样的错误 “无法将系列转换为 ” 和 “类型错误:/ 的操作数类型不受支持:'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))

此代码不可读或不可测试,因为它引用了甚至尚未声明的变量。

但是,如果您的问题是“如何将字符串百分比转换为浮点小数?”处理系列时,您可以这样做:

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。

希望对您有所帮助(第一个 Whosebug 回答)。