python - 如何将字符串百分比转换为浮点小数?
问题描述
如何将字符串百分比转换为浮点小数?我编写了这段代码,当我运行它时,我只得到了诸如“无法将系列转换为 <class 'int'>”和“TypeError: unsupported operand type(s) for /: 'str' and 'int'”之类的错误有问题的行似乎是 "sigma = chain["calls"]['Implied Volatility']" 因为我认为 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。
希望有帮助(第一个stackoverflow答案)。
推荐阅读
- c++ - 如何返回值为 NULL 的变量指针
- javascript - 如何在事件中使用异步等待?
- jquery - 用户向后分页时如何防止数据表拉取数据?
- r - 如何在R中用相同的变量名对每个文件求和
- java - 我自己的 HashMap get() 方法实现在其中明显有元素时返回 null
- kotlin - Kotlin - 在 foreach 中使其可变
- c++ - 使用 N-API 时如何避免分段错误?
- excel - 在 VBA for Excel 中创建类型搜索敏感组合框
- angular - 检测从剪贴板中的 gmail 拆分的行(角度)
- java - 导入 javax.xml.ws.BindingProvider;失败