yfinance调用balance_sheet报错:'DataFrame' object is not callable
问题解决:yfinance中调用balance_sheet触发TypeError
问题场景
以下代码中,get_history()方法可正常运行,但调用get_balance_sheet('2y')时触发TypeError,提示'DataFrame'对象不可调用:
import yfinance as yf class SAnalysis: def __init__(self, scrip): self.scrip = scrip self.data = yf.Ticker(self.scrip) def get_history(self): data = self.data.history() return data def get_balance_sheet(self, limit = '1y'): b_sheet = self.data.balance_sheet(period = limit) return b_sheet s = SAnalysis('NVDA') s.get_history().head() # 执行下方代码报错 # s.get_balance_sheet('2y')
错误信息:
TypeError Traceback (most recent call last) Cell In[18], line 1 ----> 1 s.get_balance_sheet('2y') Cell In[13], line 12, in SAnalysis.get_balance_sheet(self, limit) 11 def get_balance_sheet(self, limit = '1y'): ---> 12 b_sheet = self.data.balance_sheet(period = limit) 13 return b_sheet TypeError: 'DataFrame' object is not callable
问题原因
在yfinance库中,yf.Ticker对象的balance_sheet是DataFrame类型的属性,不是可调用的方法。你错误地将其当作方法添加括号传参,因此触发类型错误。
若需指定时间范围获取资产负债表,应使用带get前缀的get_balance_sheet()方法,该方法支持传入period参数。
修正后的代码
import yfinance as yf class SAnalysis: def __init__(self, scrip): self.scrip = scrip self.data = yf.Ticker(self.scrip) def get_history(self): data = self.data.history() return data def get_balance_sheet(self, limit = '1y'): # 替换为get_balance_sheet方法 b_sheet = self.data.get_balance_sheet(period=limit) return b_sheet s = SAnalysis('NVDA') # 现在可正常获取2年期资产负债表 print(s.get_balance_sheet('2y'))
补充说明
balance_sheet属性默认返回最近一期的资产负债表数据,无法指定时间范围get_balance_sheet(period)方法支持的period参数包括:'1y', '2y', '5y', '10y', 'max'等,用于指定数据的时间跨度
内容的提问来源于stack exchange,提问作者Shimron Alakkal
相关产品推荐
相关产品推荐

