使用yfinance遍历股票列表时while循环仅获取首个标的,如何解决?
问题原因及修正方案
核心问题1:缩进错误导致逻辑混乱
你的代码里counter += 1没有缩进在while循环的代码块内,这会让counter的值永远停留在初始的0,while counter <= len(symbols)的条件永远成立,形成死循环。更关键的是,这个while循环完全多余——你已经用for循环做遍历了,没必要嵌套while。
核心问题2:遍历对象错误
pd.read_csv返回的是DataFrame对象,直接for symbol in symbols遍历的是DataFrame的列名,而不是你想要的股票代码列表。你需要明确指定股票代码所在的列(比如假设列名为symbol),把列数据转换成可遍历的列表。
修正后的代码示例
import pandas as pd import yfinance as yf # 读取股票列表,假设代码列名为"symbol" symbols = pd.read_csv("symbol_list_short.csv") # 提取股票代码列转为列表 symbol_list = symbols["symbol"].tolist() for symbol in symbol_list: stock = yf.Ticker(symbol) try: # 先判断pegRatio是否存在且不为空 peg_ratio = stock.info.get("pegRatio") if peg_ratio is not None: print(f"{stock.info['symbol']} : {peg_ratio}") except Exception: # 捕获其他可能的异常,避免单个股票出错中断遍历 pass
内容的提问来源于stack exchange,提问作者BarbG
相关产品推荐
相关产品推荐

