如何在Pandas DataFrame中添加yfinance获取的指定日期股票价格
给Pandas DataFrame添加股票价格列的解决方案
问题场景
现有如下结构的Pandas DataFrame:
| Ticker | Date |
|---|---|
| AAPL | 2022-11-22 |
| MSFT | 2022-11-22 |
| META | 2022-11-22 |
需要为其添加Price列,存储对应股票在指定日期的价格,目标结构如下:
| Ticker | Date | Price |
|---|---|---|
| AAPL | 2022-11-22 | 147,47 |
| MSFT | 2022-11-22 | 243,71 |
| META | 2022-11-22 | 108,50 |
要求通过for循环逐个获取价格,同时用except语句处理股票未找到的情况(标记为“not available”)。用户原有代码因错误操作索引,导致无法将获取的价格合并到原DataFrame。
修正后的代码实现
import pandas as pd import yfinance as yf # 初始化原DataFrame df = pd.DataFrame({ 'Ticker': ['AAPL', 'MSFT', 'META'], 'Date': ['2022-11-22', '2022-11-22', '2022-11-22'] }) # 初始化Price列为默认值 df['Price'] = 'not available' # 循环遍历每一行获取价格 for i in df.index: ticker = df.loc[i, 'Ticker'] target_date = df.loc[i, 'Date'] try: # 下载指定日期的股票数据,关闭进度条避免干扰 stock_data = yf.download(ticker, start=target_date, end=target_date, progress=False) # 检查是否获取到有效数据 if not stock_data.empty: # 提取调整后收盘价,格式化为逗号分隔的两位小数 closing_price = stock_data['Adj Close'].iloc[0] df.loc[i, 'Price'] = f"{closing_price:.2f}".replace('.', ',') except: # 捕获异常(如无效代码、无交易数据等),保持默认值 continue print(df)
关键说明
- 索引操作修正:原代码错误地从
DataFrame.index中取列值,正确方式是用df.loc[i, '列名']获取指定行的对应列数据。 - 默认值初始化:先给
Price列设置默认值“not available”,确保异常情况或无数据时不会出现空值。 - 数据有效性检查:下载数据后判断
stock_data是否为空,避免因目标日期无交易导致的索引错误。 - 异常处理:
try-except块捕获所有可能的异常(如无效股票代码、网络问题等),保证循环正常执行完毕。
内容的提问来源于stack exchange,提问作者Not_a_Robot
相关产品推荐
相关产品推荐

