Guide 12 · updated 2026-10-20

yfinance Adj Close missing: check auto_adjust and MultiIndex

A missing Adj Close and unexpected tuple columns can both follow yf.download defaults. Set adjustment and column shape explicitly before reading a price series.

By 차도녀 gpt may · Reviewed:

Symptoms

A pipeline expecting Adj Close from yf.download() may fail a column lookup even when Close is present. A separate lookup may fail because a one-ticker download has MultiIndex columns. The missing-column report and single-ticker column report describe these symptoms. They do not prove a new runtime defect on 2026-10-18.

Cause

The 1.7.0 download source sets auto_adjust=True and multi_level_index=True by default. The price-adjustment documentation says auto_adjust=False returns Yahoo OHLC already adjusted for splits and an Adj Close that also reflects dividends. With auto_adjust=True, all OHLC fields reflect splits and dividends: Close is the adjusted close and no separate Adj Close appears. The adjustment helper shows the rename. Separately, multi_level_index=False removes the ticker level only for exactly one ticker. Multiple tickers retain a ticker level, so select both the price field and symbol. The 2026-10-18 documentation commit clarified the price semantics; it does not establish when the defaults first changed.

Safe resolution

Choose the required price meaning before selecting columns. Set auto_adjust=False for a separate dividend-adjusted Adj Close, or auto_adjust=True and read Close for adjusted OHLC. Use multi_level_index=False for one flat ticker and preserve the symbol level for multiple tickers. Record the package version, symbols, interval, both options and field meaning in the ingestion contract. These calls require network access when a reader runs them; they were not run for this review.

import yfinance as yf
from importlib.metadata import version

print("yfinance", version("yfinance"))

raw = yf.download(
    "AAPL", period="1y", auto_adjust=False,
    multi_level_index=False, progress=False,
)
if raw.empty or "Adj Close" not in raw.columns:
    raise ValueError("Expected a nonempty single-ticker Adj Close series")
adj_close = raw["Adj Close"]

adjusted = yf.download(
    "AAPL", period="1y", auto_adjust=True,
    multi_level_index=False, progress=False,
)
if adjusted.empty or "Close" not in adjusted.columns or "Adj Close" in adjusted.columns:
    raise ValueError("Unexpected adjusted-price schema")
adjusted_close = adjusted["Close"]

many = yf.download(
    ["AAPL", "MSFT"], period="1y", auto_adjust=False,
    multi_level_index=True, group_by="column", progress=False,
)
if many.empty or ("Adj Close", "AAPL") not in many.columns:
    raise ValueError("Unexpected multi-ticker schema")
apple_adj_close = many["Adj Close"]["AAPL"]

Verification

Source review on 2026-10-20 covers yfinance 1.7.0 source, project documentation and issue reports; no Yahoo price request or live data comparison was performed. For a local shape test, use saved nonempty fixtures for both adjustment modes and one versus multiple tickers; assert expected fields and index levels, including a failure control with the wrong field. For real-feed acceptance, compare known split and dividend dates and save the observed values, package version, options and timestamps. A period without either event cannot establish adjustment semantics. Fixture shape checks do not prove Yahoo price correctness.

Limitations

The first version in which either default changed was not established. The latest release checked here was 1.7.0 (2026-08-26); later package or upstream behavior may differ. The guidance here concerns yf.download(); check Ticker.history() against its own call contract. The project README identifies yfinance as unofficial and intended for research and education, and warns that Yahoo data is intended for personal use. The library license and rights to downloaded data are separate. No live quote, commercial-use permission or production result was verified.

Sources and verification scope

Source review on 2026-10-20 covers yfinance 1.7.0 source, project documentation and issue reports; no Yahoo price request or live data comparison was performed.

Related providers