yfinanceで日本株を取得できない時の原因と対処法【エラー別】

Uncategorized

※本記事には広告・アフィリエイトリンクが含まれます。掲載内容は筆者の調査・検証に基づき、読者の判断を助ける目的で作成しています。

結論から言うと

  • 日本株のティッカーシンボルは末尾に「.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で日本株が取得できない場合のチェックリストをまとめます。

  1. ティッカーシンボルの末尾に「.T」が付いているか確認
  2. yfinanceのバージョンが0.2.x以上か確認
  3. ネットワーク接続・Yahoo! Financeのサーバー状況を確認
  4. 銘柄が上場廃止・新規上場直後でないか確認
  5. それでも解決しない場合はJ-Quants APIなど代替手段を検討
データ取得方法の比較はこちら
yfinance・J-Quants・stooqを含む各手段の詳細比較:Python株価データ取得ライブラリ比較

※当サイトの内容は投資判断を推奨するものではありません。掲載しているコード・分析例は学習・検証目的であり、実際の投資はご自身の責任で行ってください。

タイトルとURLをコピーしました