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

Pandas两列相除报TypeError: only integer scalar arrays转标量索引错误如何解决

问题原因
  • yahoo_fin的get_balance_sheet()接口返回的DataFrame默认使用datetime64类型作为列名,你使用字符串格式的'2020-10-31'、'2017-10-31'作为索引键时,pandas无法匹配到对应列,触发类型不匹配的索引错误。
  • 你可以先执行print(dfstock.columns)验证该问题,输出结果大概率为DatetimeIndex格式的列,不存在字符串类型的日期列名。
修复方案

你可以任选以下任意一种方式解决问题,修复后的完整代码参考如下:

import yahoo_fin.stock_info as si
import pandas as pd
import numpy as np

x = si.get_balance_sheet('TD')
dfstock = pd.DataFrame(x)
dfstock = dfstock/10000000
dfstock = dfstock.fillna(0)

# 方案1:将所有列名转为字符串格式后再索引
dfstock.columns = dfstock.columns.astype(str)
dfstock['Growth'] = dfstock['2020-10-31'] / dfstock['2017-10-31']

# 方案2:直接使用datetime对象索引,无需修改原列名
# dfstock['Growth'] = dfstock[pd.to_datetime('2020-10-31')] / dfstock[pd.to_datetime('2017-10-31')]

# 方案3:如果不确定具体财报日期,按列位置取最新列与往前数第3列计算增速
# dfstock['Growth'] = dfstock.iloc[:, 0] / dfstock.iloc[:, 3]
额外注意事项
  • get_balance_sheet()默认仅返回最近4年的财报数据,运行前请先确认你的数据集中确实包含2020-10-31、2017-10-31两个日期的列,如缺失需要调整接口参数拉取更长时间范围的历史数据。
  • 可额外添加dfstock = dfstock.replace([np.inf, -np.inf], 0)处理除数为0产生的无穷值问题,避免后续运算报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:15:08