※本記事には広告・アフィリエイトリンクが含まれます。掲載内容は筆者の調査・検証に基づき、読者の判断を助ける目的で作成しています。
結論から言うと
- 日本株のティッカーシンボルは末尾に「.T」が必要で、これが抜けると空のDataFrameが返る仕組みです
- API制限やyfinanceのバージョン不足が原因の場合は、バージョンアップか時間をおいた再実行で解決できます
- yfinanceで取得できないデータは、J-Quants APIや証券会社のAPIを代替手段として使えます
率直に言うと、yfinanceのエラーの8割はティッカーシンボルの指定ミスです。「7203」と「7203.T」では動作が全く異なります。実際に7203.T(トヨタ)、6758.T(ソニー)、9984.T(ソフトバンクG)で検証し、原因と対処法を確認しました。
動作確認環境:Python 3.11 / pandas 2.x / yfinance 0.2.x
yfinanceで日本株が取得できない主な原因
ティッカーシンボルの末尾に「.T」が必要
yfinanceで日本株を取得する際に最も多いミスが、ティッカーシンボルの末尾の「.T」を忘れることです。東京証券取引所(TSE)の銘柄はすべて末尾に「.T」が必要な仕組みです。
# 正しいティッカー指定(末尾に.Tが必要)
import yfinance as yf
df = yf.download("7203.T", period="1mo") # OK
df_wrong = yf.download("7203", period="1mo") # NG:空データが返る
print(len(df)) # 数十行のデータ
print(len(df_wrong)) # 0行(空)
「.T」なしでも一部のコードでは実行がエラーにならず、ただ空のDataFrameが返ってくる点がわかりにくい原因です。また、名証・福証・札証の銘柄も東証と同様に「.T」で取得できるケースが多いです。
API制限・レート制限による一時的なエラー
Yahoo! Finance APIには非公式のレート制限があります。短時間に大量のリクエストを送ると一時的にデータが取得できなくなる場合があります。
import yfinance as yf
import time
tickers = ["7203.T", "6758.T", "9984.T", "6861.T", "6367.T"]
results = {}
for ticker in tickers:
results[ticker] = yf.download(ticker, period="1mo")
time.sleep(1) # 1秒待機を入れてレート制限を回避
yfinanceのバージョンが古い
yfinanceはYahoo! Finance側のAPI仕様変更に追従してアップデートが頻繁に行われています。バージョンが古いと、新しいAPIに対応できず空データやエラーが返ることがあります。
# バージョン確認
import yfinance
print(yfinance.__version__) # 0.2.x以上を推奨
バージョンが古い場合はアップデートします。
pip install --upgrade yfinance
銘柄によってはデータが存在しない
上場廃止銘柄・新規上場直後の銘柄・一部の地方市場銘柄は、Yahoo! Financeにデータが存在しない場合があります。また、過去にティッカーシンボルが変更された銘柄も正しく取得できないことがあります。
エラーメッセージ別の対処法
| 症状・エラー | 原因 | 対処法 |
|---|---|---|
| 空のDataFrameが返る(0行) | ティッカーに「.T」なし、または銘柄が存在しない | 「7203.T」のように「.T」を付ける |
| JSONDecodeError / ConnectionError | ネットワーク障害またはAPI一時停止 | 時間をおいて再実行 |
| No data found for this date range | 指定期間にデータなし(上場前・廃止後など) | 期間を変更するか別銘柄で確認 |
| AttributeError: ‘NoneType’ | yfinanceのバージョン不一致 | pip install –upgrade yfinanceで更新 |
yfinanceで取得できないデータの代替手段
yfinanceで取得できない場合や、より安定したデータが必要な場合の代替手段を挙げます。
- J-Quants API:日本取引所グループが提供する公式API。無料プランあり
- SBI証券・楽天証券のAPI:口座開設が必要だが、リアルタイムデータに対応
- stooq:pandas_datareaderから利用できる無料データソース
# pandas_datareaderでstooqからデータ取得する方法
import pandas_datareader as pdr
from datetime import datetime
df = pdr.get_data_stooq("7203.JP", start="2024-01-01", end="2024-12-31")
print(df.head())
筆者の検証メモ
トヨタ(7203.T)、ソニー(6758.T)、ソフトバンクG(9984.T)の3銘柄で、yfinance 0.2.x環境での動作を確認しました。「.T」なしで取得しようとした場合、いずれもエラーにはならず静かに空のDataFrameが返ってくる仕組みです。初心者が詰まりやすいポイントとして、まずここを確認することを推奨します。
まとめ
yfinanceで日本株が取得できない場合のチェックリストをまとめます。
- ティッカーシンボルの末尾に「.T」が付いているか確認
- yfinanceのバージョンが0.2.x以上か確認
- ネットワーク接続・Yahoo! Financeのサーバー状況を確認
- 銘柄が上場廃止・新規上場直後でないか確認
- それでも解決しない場合はJ-Quants APIなど代替手段を検討
yfinance・J-Quants・stooqを含む各手段の詳細比較:Python株価データ取得ライブラリ比較
※当サイトの内容は投資判断を推奨するものではありません。掲載しているコード・分析例は学習・検証目的であり、実際の投資はご自身の責任で行ってください。

