Python 关于.apply()和通过函数传递整列的问题
我有一个数据框架,以股票作为标题和行,在过去一年中每日调整收盘价,我想计算年化波动率,但我不确定如何通过列。当我运行此代码时,我得到一个异常:Python 关于.apply()和通过函数传递整列的问题,python,pandas,apply,yfinance,Python,Pandas,Apply,Yfinance,我有一个数据框架,以股票作为标题和行,在过去一年中每日调整收盘价,我想计算年化波动率,但我不确定如何通过列。当我运行此代码时,我得到一个异常:TypeError:“Series”对象不可调用 import pandas as pd import datetime as datetime from datetime import timedelta import yfinance as yf df = pd.read_excel('C:/Users/Jacob/Downloads/Benchma
TypeError:“Series”对象不可调用
import pandas as pd
import datetime as datetime
from datetime import timedelta
import yfinance as yf
df = pd.read_excel('C:/Users/Jacob/Downloads/Benchmark Tickers.xlsx', sheet_name='Sheet1')
tickers_list = df['Ticker'].tolist()
data = pd.DataFrame(columns=tickers_list)
for ticker in tickers_list:
data[ticker] = yf.download(ticker, start=datetime.datetime.now()-datetime.timedelta(days=365), end=datetime.date.today()) ["Adj Close"]
def volatility(ticker):
return data[ticker].pct_change().rolling(252).std()*(252**0.5)
data[ticker].apply(volatility(ticker))
export_excel = data.to_excel(r'C:/Users/User/Downloads/testvol.xlsx', sheet_name='Sheet1', index= True)
如何将此波动率函数应用于每一列
以下是一个链接,指向在执行Y财务拉动时拉动的数据:
在对序列调用
apply
时,您不会像调用函数时通常那样指定参数,而是将其作为关键字参数传递:
data[ticker] = data[ticker].apply(volatility, ticker=ticker)
那应该会解决的
熊猫文档也有一些很好的例子。请参阅。当您在序列上调用
apply
时,您不会像调用函数时通常那样指定参数,而是将其作为关键字参数传递:
data[ticker] = data[ticker].apply(volatility, ticker=ticker)
那应该会解决的
熊猫文档也有一些很好的例子。参见。- 在数据帧上使用
时,轴=0,默认情况下,对每列执行逐列计算,因此无需指定每一个股票代码名称.apply
将熊猫作为pd导入
以yf形式导入yf财务
从日期时间导入日期时间、时间增量、日期
#给我一张股票行情表
股票代码=['EFT','PPR','SRLN']
#创建包含列的空数据帧
数据=pd.DataFrame(列=标记器)
#获取数据
对于自动售检票机中的自动售检票机:
data[ticker]=yf.download(ticker,start=datetime.now()-timedelta(days=365),end=date.today())[“Adj Close”]
#对每个股票代码执行计算,并将其添加到calcs数据框中
#252对许多人来说是滚动的;这意味着它需要252行来执行计算。
#to将用于显示它正在工作
calcs=数据.apply(λx:x.pct_change().滚动(10.std()*(10**0.5))
#显示器(计算头(20))
EFT PPR SRLN
日期
2019-08-20楠楠
2019-08-21楠楠
2019-08-22楠楠
2019-08-23楠楠
2019-08-26楠楠
2019-08-27楠楠
2019-08-28楠楠
2019-08-29楠楠
2019-08-30楠楠
2019-09-03楠楠
2019-09-04 0.009594 0.012125 0.004690
2019-09-05 0.009483 0.012122 0.004691
2019-09-06 0.009870 0.009697 0.004736
2019-09-09 0.009037 0.010020 0.004191
2019-09-10 0.009205 0.009544 0.003981
2019-09-11 0.006672 0.009543 0.004084
2019-09-12 0.006492 0.010054 0.003925
2019-09-13 0.005592 0.010049 0.003992
2019-09-16 0.005428 0.012274 0.003367
2019-09-17 0.004926 0.010776 0.002505
- 在数据帧上使用
时,轴=0,默认情况下,对每列执行逐列计算,因此无需指定每一个股票代码名称.apply
将熊猫作为pd导入
以yf形式导入yf财务
从日期时间导入日期时间、时间增量、日期
#给我一张股票行情表
股票代码=['EFT','PPR','SRLN']
#创建包含列的空数据帧
数据=pd.DataFrame(列=标记器)
#获取数据
对于自动售检票机中的自动售检票机:
data[ticker]=yf.download(ticker,start=datetime.now()-timedelta(days=365),end=date.today())[“Adj Close”]
#对每个股票代码执行计算,并将其添加到calcs数据框中
#252对许多人来说是滚动的;这意味着它需要252行来执行计算。
#to将用于显示它正在工作
calcs=数据.apply(λx:x.pct_change().滚动(10.std()*(10**0.5))
#显示器(计算头(20))
EFT PPR SRLN
日期
2019-08-20楠楠
2019-08-21楠楠
2019-08-22楠楠
2019-08-23楠楠
2019-08-26楠楠
2019-08-27楠楠
2019-08-28楠楠
2019-08-29楠楠
2019-08-30楠楠
2019-09-03楠楠
2019-09-04 0.009594 0.012125 0.004690
2019-09-05 0.009483 0.012122 0.004691
2019-09-06 0.009870 0.009697 0.004736
2019-09-09 0.009037 0.010020 0.004191
2019-09-10 0.009205 0.009544 0.003981
2019-09-11 0.006672 0.009543 0.004084
2019-09-12 0.006492 0.010054 0.003925
2019-09-13 0.005592 0.010049 0.003992
2019-09-16 0.005428 0.012274 0.003367
2019-09-17 0.004926 0.010776 0.002505
首先,非常感谢您的回复。当我这样运行时,得到的错误是:ValueError:shape mismatch:shape的值数组(252,)无法广播到shape(7,0)的索引结果。不确定这意味着什么,试着用谷歌搜索。不过我会查看你的链接。再次感谢您的回复。首先,非常感谢您的回复。当我这样运行时,得到的错误是:ValueError:shape失配:无法将形状(252,)的值数组广播到形状(7,0)的索引结果。不确定这意味着什么,试着用谷歌搜索。不过我会查看你的链接。再次感谢您的回复。