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

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

詳細はこちら
Python

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

pandas

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

Q&A

解決済

1回答

2367閲覧

pythonにおけるindex設定変更の方法について

taniisei

総合スコア5

Python

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

pandas

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

0グッド

0クリップ

投稿2021/01/01 05:25

私は、pythonの学習の一環で株価のスクレイピングを行なっております。
ライブラリpandasを用いて、データの取得まで行い、現在データをグラフ化するために日付型に変換した日付情報をデータのインデックスしようとしているのですが、エラーが出てしまいました。
set_index( )を用いて、設定を変更しようとしておりますが、何度やってもインデックス設定が変更できません。エラーの内容的に、インデックス設定が変更出来ていれば、グラフ化出来そうなのですが、参考サイトからコピペした時も同じエラーが出ており、正直何が間違っているのかわかりません。
ご教示していただけたら幸いです。

以下にpythonで書いたプログラムを示させていただきます。

python

1import pandas as pd 2url = 'https://finance.yahoo.com/quote/%5EN225/history?p=%5EN225' 3data = pd.read_html(url, header = 0) 4print(data[0].head()) 5print(data[0].tail()) 6data[0].dropna(how = 'all',inplace = True) 7data[0].tail() 8data[0] = data[0].drop([100]) 9from datetime import datetime as dt 10data[0]['Date2'] = [dt.strptime(i, '%b %d, %Y') for i in data[0]['Date']] 11print(data[0]['Date2'].head()) 12print(data[0].head()) 13data[0] = data[0].set_index('Date2', inplace=True) 14data[0].head() 15import matplotlib.pyplot as plt 16data[0]["Adj Close**"].plot(title='AAPL Stock Price',grid=True)

以下に実行結果を示させていただきます。

Date Open High Low Close* Adj Close** Volume 0 Dec 30, 2020 27559.10 27572.57 27338.56 27444.17 27444.17 50600 1 Dec 29, 2020 26936.38 27602.52 26921.14 27568.15 27568.15 59400 2 Dec 28, 2020 26691.29 26854.03 26664.60 26854.03 26854.03 50700 3 Dec 25, 2020 26708.10 26716.61 26638.28 26656.61 26656.61 33400 4 Dec 24, 2020 26635.11 26764.53 26605.26 26668.35 26668.35 47900 Date Open High Low Close* Adj Close** Volume 96 Aug 11, 2020 22505.51 22760.87 22497.07 22750.24 22750.24 99300 97 Aug 07, 2020 22433.78 22436.16 22204.61 22329.94 22329.94 66700 98 Aug 06, 2020 22471.71 22587.75 22362.89 22418.15 22418.15 62600 99 Aug 05, 2020 22479.72 22554.20 22356.25 22514.85 22514.85 74000 100 *Close price adjusted for splits.**Adjusted cl... *Close price adjusted for splits.**Adjusted cl... *Close price adjusted for splits.**Adjusted cl... *Close price adjusted for splits.**Adjusted cl... *Close price adjusted for splits.**Adjusted cl... *Close price adjusted for splits.**Adjusted cl... *Close price adjusted for splits.**Adjusted cl... 0 2020-12-30 1 2020-12-29 2 2020-12-28 3 2020-12-25 4 2020-12-24 Name: Date2, dtype: datetime64[ns] Date Open High Low Close* Adj Close** Volume Date2 0 Dec 30, 2020 27559.10 27572.57 27338.56 27444.17 27444.17 50600 2020-12-30 1 Dec 29, 2020 26936.38 27602.52 26921.14 27568.15 27568.15 59400 2020-12-29 2 Dec 28, 2020 26691.29 26854.03 26664.60 26854.03 26854.03 50700 2020-12-28 3 Dec 25, 2020 26708.10 26716.61 26638.28 26656.61 26656.61 33400 2020-12-25 4 Dec 24, 2020 26635.11 26764.53 26605.26 26668.35 26668.35 47900 2020-12-24 Traceback (most recent call last): File "script.py", line 57, in <module> data[0].head() AttributeError: 'NoneType' object has no attribute 'head'

前提・実現したいこと

私は、pythonの学習の一環で株価のスクレイピングを行なっております。
取得データをグラフ化するため、インデックス設定を変更したい。
以下のエラーメッセージが発生しました。

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

File "script.py", line 57, in <module> data[0].head() AttributeError: 'NoneType' object has no attribute 'head'

該当のソースコード

data[0] = data[0].set_index('Date2', inplace=True) data[0].head() import matplotlib.pyplot as plt data[0]["Adj Close**"].plot(title='AAPL Stock Price',grid=True)

試したこと

参考サイトのコードで実行。 取得データから直接該当部分をコピペして実行。。

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

Python 3.6.0 lxml4.6.2 pandas0.25.3 datetime ここにより詳細な情報を記載してください。 参考ホームページ https://ai-inter1.com/python-pandas_scraping/ 変換したいデータを取得したホームページ https://finance.yahoo.com/quote/%5EN225/history?p=%5EN225 (注:これは、スクレイピングの練習のために、書いているコードなので、データ自体はなんでも構いません。

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

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

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

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

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

taniisei

2021/01/01 09:49

なるほどそうだったんですね。 ありがとうございす。
guest

回答1

0

ベストアンサー

set_indexの仕様に関する誤解です。

pythonでは一般に、inplaceで変更する関数やメソッドは値を返しません。
set_indexはinplace=Falseなら値を返しますが、inplace=Trueなら
値を返しません(つまりNoneを返します)

data[0] = data[0].set_index('Date2', inplace=True)

ではdata[0]にNoneが代入されているので、data[0].head()がエラーになります。

data[0].set_index('Date2', inplace=True)

とするか、

data[0] = data[0].set_index('Date2')

とするかにしてください。

投稿2021/01/01 05:43

編集2021/01/01 05:45
ppaul

総合スコア24670

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

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

taniisei

2021/01/01 11:28

返信ありがとうございます。 ご指摘いただいたコードを書いて実行したら、できました。ありがとうございす。 data[0].set_index('Date2', inplace=True)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問