You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用Series.cov()报错:缺少必填参数'other',求问题排查

问题解决:TypeError: Series.cov() missing 1 required positional argument: 'other'

错误原因

你在代码里执行portifolioReturns = portifolioReturns.dot(portifolioWeight)后,portifolioReturns从多列的DataFrame(每列对应一只股票的日收益)变成了单列的Series(加权后的投资组合日收益)。而Pandas的Series.cov()方法需要传入另一个Series来计算协方差,单独调用就会触发这个参数缺失的错误。

更关键的是,你要生成的是资产间的协方差矩阵,这一步应该在计算加权投资组合收益之前完成,而不是之后。

修正后的代码

def portifolioOptimalization(inputStocks):
    import yfinance as yf
    import random

    stocks = inputStocks
    portifolioData = yf.download(stocks, '2020-1-1')['Close']
    portifolioReturns = portifolioData.pct_change().dropna()  # 去掉首日空值

    # 先计算资产协方差矩阵(这才是你需要的)
    varianceMatrix = portifolioReturns.cov()

    numberOfStocks = len(inputStocks)
    portifolioWeight = []
    weightSum = 1  # 不需要用global,函数内定义即可

    for i in range(numberOfStocks-1):
        stockWeight = round(random.uniform(0.0, weightSum), 2)
        weightSum -= stockWeight
        portifolioWeight.append(stockWeight)
    
    portifolioWeight.append(weightSum)
    # 计算加权后的投资组合收益
    portifolioDailyReturns = portifolioReturns.dot(portifolioWeight)

    # 后续可以用协方差矩阵和权重计算投资组合方差/标准差
    portifolioVariance = portifolioWeight @ varianceMatrix @ portifolioWeight
    portifolioStd = portifolioVariance ** 0.5

    return varianceMatrix, portifolioDailyReturns, portifolioStd

关键修正点

  • 把协方差矩阵的计算varianceMatrix = portifolioReturns.cov()移到dot()加权操作之前,此时portifolioReturns是多列DataFrame,调用cov()会直接生成资产间的协方差矩阵。
  • 去掉不必要的global weightSum,函数内的变量不需要全局声明。
  • 添加dropna()去掉收益数据的首日空值(因为pct_change()会让第一行变成NaN)。
  • 补充了投资组合方差和标准差的计算(这是投资组合优化常用的指标)。

内容的提问来源于stack exchange,提问作者Halvor Johnsen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 13:25:33