使用Finviz创建含股票代码的Pandas DataFrame时遇TypeError求助
解决提取股票代码DataFrame的TypeError错误
错误原因
报错TypeError: 'int' object is not subscriptable是因为screener.data_frames列表中混入了整数类型元素(大概率是分页请求返回的状态码),导致尝试用df['Tickers']索引整数对象时触发错误。
修复方案
方案1:过滤无效元素
遍历data_frames时,仅处理DataFrame类型的有效数据:
from pyfinviz.screener import Screener import pandas as pd options = [Screener.IndustryOption.STOCKS_ONLY_EX_FUNDS, Screener.AnalystRecomOption.STRONG_BUY_1] screener = Screener(filter_options=options, view_option=Screener.ViewOption.VALUATION, pages=[x for x in range(1, 4)]) # 只保留DataFrame类型的元素 t_list = [df['Tickers'] for df in screener.data_frames if isinstance(df, pd.DataFrame)] tickers_df = pd.concat(t_list).reset_index(drop=True) print(tickers_df)
方案2:直接使用合并后的数据
利用Screener对象的data属性,它会自动合并所有分页的有效数据,无需手动遍历拼接:
from pyfinviz.screener import Screener import pandas as pd options = [Screener.IndustryOption.STOCKS_ONLY_EX_FUNDS, Screener.AnalystRecomOption.STRONG_BUY_1] screener = Screener(filter_options=options, view_option=Screener.ViewOption.VALUATION, pages=[x for x in range(1, 4)]) # 直接从合并后的DataFrame提取股票代码列 tickers_df = screener.data['Tickers'].reset_index(drop=True) print(tickers_df)
内容的提问来源于stack exchange,提问作者k07
相关产品推荐
相关产品推荐

