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)
那应该会解决的

熊猫文档也有一些很好的例子。参见。

  • 在数据帧上使用
    .apply
    时,轴=0,默认情况下,对每列执行逐列计算,因此无需指定每一个股票代码名称
将熊猫作为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
  • 在数据帧上使用
    .apply
    时,轴=0,默认情况下,对每列执行逐列计算,因此无需指定每一个股票代码名称
将熊猫作为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)的索引结果。不确定这意味着什么,试着用谷歌搜索。不过我会查看你的链接。再次感谢您的回复。