从CSV读取股票代码,批量获取并写入对应估值指标
批量从CSV读取股票代码并获取PbRatio指标
原代码可正常运行,但仅支持手动输入股票代码获取asOfDate和PbRatio指标,现需处理约30万条股票代码,要求修改代码实现从CSV读取股票代码,批量获取对应指标并写入对应列。
原代码
import pandas as pd from yahooquery import Ticker symbols = ['MSFT','AAPL','GOOG'] header = ["asOfDate","PbRatio"] for tick in symbols: faang = Ticker(tick) faang.valuation_measures df = faang.valuation_measures try: for column_name in header : if column_name not in df.columns: df.loc[:,column_name ] = None #Missing columns set to None. df = df[df['PbRatio'].notna()] df = df[df['asOfDate'] == df['asOfDate'].max()] df.to_csv('Output.csv', mode='a', index=True, header=False, columns=header) except AttributeError: continue
当前CSV文件样式

期望输出样式

修改后的代码
import pandas as pd from yahooquery import Ticker # 读取包含股票代码的输入CSV(假设股票代码列名为'Symbol',可根据实际列名调整) input_df = pd.read_csv('input.csv') # 初始化要添加的指标列 input_df['asOfDate'] = None input_df['PbRatio'] = None # 分批处理股票代码,避免单次请求量过大触发API限制(每批100个,可按需调整) batch_size = 100 symbols = input_df['Symbol'].dropna().tolist() for i in range(0, len(symbols), batch_size): batch_symbols = symbols[i:i+batch_size] # 批量请求多只股票的估值数据 tickers = Ticker(batch_symbols) val_measures = tickers.valuation_measures if val_measures is not None: # 筛选非空的PbRatio,并保留每只股票最新日期的数据 latest_data = val_measures[val_measures['PbRatio'].notna()] latest_data = latest_data.loc[latest_data.groupby('symbol')['asOfDate'].idxmax()] # 将匹配的指标数据映射回原CSV对应行 for _, row in latest_data.iterrows(): symbol = row['symbol'] input_df.loc[input_df['Symbol'] == symbol, 'asOfDate'] = row['asOfDate'] input_df.loc[input_df['Symbol'] == symbol, 'PbRatio'] = row['PbRatio'] # 保存最终结果到输出CSV input_df.to_csv('Output.csv', index=False)
关键说明
- 用批量请求替代单循环遍历,大幅提升30万条数据的处理效率,同时规避频繁请求的API限制
- 自动筛选每只股票最新日期的有效
PbRatio数据,保证数据时效性 - 直接在原CSV结构上新增指标列,完全匹配期望输出格式
- 支持分批参数调整,可根据实际API限额修改
batch_size值
内容的提问来源于stack exchange,提问作者HTMLHelpMe
相关产品推荐
相关产品推荐

