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
相关产品推荐
相关产品推荐

