🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

1回答

1556閲覧

Pythonを使ってエクセルから銘柄コートを取得。チャートを出力・保存後にエクセルに貼り付け。エラーについて

tak123456

総合スコア1

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2021/02/06 08:34

前提・実現したいこと

Pythonを使ってエクセルから銘柄コートを取得してチャートを出力・保存後に画像のようにエクセルの貼り付けを考えています。

発生している問題・エラーメッセージ

100銘柄中の80銘柄程取得すると以下のエラーがでます。
Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of 'Index'

また、図のようにエクセルに保存した画像を貼り付ける方法のご教示をよろしくお願いします。

該当のソースコード

!pip install mplfinance

import pandas as pd
import pandas_datareader.data as web
import matplotlib.pyplot as plt
import mplfinance as mpf
import datetime
import time #timeモジュールのインポート
import openpyxl
import numpy as np

stratTime = time.time() #プログラムの開始時刻

end = datetime.datetime.today()#期間
start='2019-04-01'

wb = openpyxl.load_workbook('D:/')
sheet = wb.get_sheet_by_name('Sheet1')

for i in range(2,5):
a=(sheet.cell(row=i, column=2).value) #銘柄コード取得
b=(sheet.cell(row=i, column=3).value) #銘柄名取得

ticker=str(a) + ".jp" print(ticker) print(b) df=web.DataReader(ticker, "stooq",start,end).dropna()#データ取得 df.sort_index(ascending=True,inplace=True) df1=df.resample('W').agg({'Open': 'first', 'High': 'max', 'Low': 'min', 'Close': 'last','Volume':'sum'}) df2=df.resample('M').agg({'Open': 'first', 'High': 'max', 'Low': 'min', 'Close': 'last','Volume':'sum'}) mpf.plot(df1, type='candle', volume=True, mav=(5,13,26), style='charles',tight_layout=True) mpf.plot(df2, type='candle', volume=True, mav=(5,13,26), style='charles',tight_layout=True) mpf.plot(df1, type='candle', volume=True, mav=(5,13,26), style='charles',tight_layout=True, savefig=str(a)+"_"+str(b)+"_週足.jpeg") mpf.plot(df2, type='candle', volume=True, mav=(5,13,26), style='charles',tight_layout=True, savefig=str(a)+"_"+str(b)+"_月足.jpeg")

endTime = time.time() #プログラムの終了時刻
runTime = endTime - stratTime #処理時間

print(runTime) #処理時間を表示

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of 'Index'
が出るのは、データフレームのindexが日時等以外の型の場合です。

エラーが出た時の
df=web.DataReader(ticker, "stooq",start,end).dropna()
の結果であるdfのindexを調べてみてください。

これに問題があるなら、何らかの方法でindexを日時等の型に変換することを検討してください。
日時を表す文字列なら、ネットで調べれば変換方法はすぐに見つかります。
そうでない場合は、個別に対応策を考えることになります。

投稿2021/02/06 14:41

ppaul

総合スコア24670

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tak123456

2021/02/07 12:44 編集

連続80銘柄はindexに問題ありませんが81銘柄目のデータを取得する時に上記のエラーが発生し、indexには何も入ってないことが分かりました。 スクレイビング防止のため、stooqが制限を設けているのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問