You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas DataFrame中添加yfinance获取的指定日期股票价格

给Pandas DataFrame添加股票价格列的解决方案

问题场景

现有如下结构的Pandas DataFrame:

TickerDate
AAPL2022-11-22
MSFT2022-11-22
META2022-11-22

需要为其添加Price列,存储对应股票在指定日期的价格,目标结构如下:

TickerDatePrice
AAPL2022-11-22147,47
MSFT2022-11-22243,71
META2022-11-22108,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)

关键说明

  1. 索引操作修正:原代码错误地从DataFrame.index中取列值,正确方式是用df.loc[i, '列名']获取指定行的对应列数据。
  2. 默认值初始化:先给Price列设置默认值“not available”,确保异常情况或无数据时不会出现空值。
  3. 数据有效性检查:下载数据后判断stock_data是否为空,避免因目标日期无交易导致的索引错误。
  4. 异常处理:try-except块捕获所有可能的异常(如无效股票代码、网络问题等),保证循环正常执行完毕。

内容的提问来源于stack exchange,提问作者Not_a_Robot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 03:31:37