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

使用Pandas计算阿迪达斯等股票月收益率遇两类TypeError报错求助

解决Pandas计算月收益率的TypeError问题

错误原因分析

  • 第一个错误:set_value在新版Pandas中已被弃用,若代码中误将mr.set_value赋值为列表,会触发'list' object is not callable错误。
  • 第二个错误:at是Pandas的索引访问器,不是可调用方法,不能用括号()调用,正确操作是用方括号[]赋值。

修复方案

方案1:修复原有循环代码

将mr.set_value(date,s,ret)替换为mr.at[date, s] = ret,同时提前初始化mr的索引和列,避免动态扩容的性能损耗:

import pandas as pd

mp = pd.read_csv("Stock price over the last 24 months of Adidas, Nike, and Puma.csv", index_col=0)
# 提前指定索引和列,提升代码效率
mr = pd.DataFrame(index=mp.index, columns=mp.columns)

# 计算月收益率
for s in mp.columns:
    pr0 = mp[s].iloc[0]
    mr.at[mp.index[0], s] = 0  # 第一个月无收益率,设为0
    for t in range(1, len(mp.index)):
        pr1 = mp[s].iloc[t]
        ret = (pr1 - pr0) / pr0
        mr.at[mp.index[t], s] = ret
        pr0 = pr1

方案2:用Pandas内置方法(推荐,简洁高效)

Pandas自带pct_change()方法,可直接计算相邻元素的百分比变化,完全替代嵌套循环:

import pandas as pd

mp = pd.read_csv("Stock price over the last 24 months of Adidas, Nike, and Puma.csv", index_col=0)
# pct_change()自动计算月收益率,第一行NaN用fillna(0)填充
mr = mp.pct_change().fillna(0)

该方法代码更简洁,性能远优于手动循环,尤其适合数据量较大的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 06:10:42