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

Pandas DataFrame应用lambda函数无输出问题排查

问题诱发原因

核心错误是变量类型不匹配导致函数运行中途抛出类型异常,后续代码根本没有执行到,具体拆解:

  • 你在mean = "{:.15f}".format(data_pct.mean())这行,把本来是浮点型的均值结果,格式化成了字符串类型赋值给mean变量,此时mean不是可参与数值运算的数字,是类似"0.000321000000000"的文本。
  • 取消sqd = data_pct.apply(lambda x: (x-mean)**2)的注释后,代码会按顺序先执行这行逻辑:lambda表达式里会拿data_pct列里每个浮点型的对数收益率,和字符串类型的mean做减法运算,这会直接触发TypeError: unsupported operand type(s) for -: 'float' and 'str'类型错误,函数在这一步就异常终止了,后面的print(mean)语句根本没机会运行,所以你看不到任何打印输出。
  • 额外隐藏问题:pct_change()计算的百分比变动序列第一行是NaN空值,就算修复了类型问题,不提前过滤空值的话,后续对数计算、方差计算也会出现非预期结果。
修正后参考代码
import numpy as np

def getVolatility(stock):
  data = stock.history(period="1y")
  # 计算对数收益率
  data['PCT'] = data['Close'].astype(float).pct_change().apply(lambda x: np.log(1+x))
  # 过滤空值
  data_pct = data['PCT'].dropna()

  # 计算均值时保持数值类型,不要提前转字符串
  mean = data_pct.mean()
  sqd = data_pct.apply(lambda x: (x-mean)**2)

  # 需要打印展示时再做字符串格式化
  print("{:.15f}".format(mean))
  print(sqd)

  # 补全年化波动率计算逻辑:日度收益率标准差*一年交易日数的平方根(通常取252)
  # annual_vol = data_pct.std() * np.sqrt(252)
  # return annual_vol

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 02:57:09