質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.50%
Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

pandas

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

Q&A

2回答

1343閲覧

繰り返し処理でページを更新し、図中のデータを取り出したい

kuro46

総合スコア6

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

pandas

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

0グッド

0クリップ

投稿2019/12/11 07:10

前提・実現したいこと

urlのページから表を取得したいと考えています。
そしてページを更新し、図中のNo.が1になったときに繰り返しを終えるようにしたいです。

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

C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\frame.py:7123: FutureWarning: Sorting because non-concatenation axis is not aligned. A future version of pandas will change to not sort by default. To accept the future behavior, pass 'sort=False'. To retain the current behavior and silence the warning, pass 'sort=True'. sort=sort, KeyError Traceback (most recent call last) C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_loc(self, key, method, tolerance) 2896 try: -> 2897 return self._engine.get_loc(key) 2898 except KeyError: pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc() pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc() pandas\_libs\index_class_helper.pxi in pandas._libs.index.Int64Engine._check_type() KeyError: 'No.' During handling of the above exception, another exception occurred: KeyError Traceback (most recent call last) <ipython-input-19-39720a9d6156> in <module> 4 df_stock = df_stock.append(data[1][5:]) 5 ----> 6 if str(data[1]["No."].tail(1)) == 1: 7 break 8 C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\frame.py in __getitem__(self, key) 2978 if self.columns.nlevels > 1: 2979 return self._getitem_multilevel(key) -> 2980 indexer = self.columns.get_loc(key) 2981 if is_integer(indexer): 2982 indexer = [indexer] C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_loc(self, key, method, tolerance) 2897 return self._engine.get_loc(key) 2898 except KeyError: -> 2899 return self._engine.get_loc(self._maybe_cast_indexer(key)) 2900 indexer = self.get_indexer([key], method=method, tolerance=tolerance) 2901 if indexer.ndim > 1 or indexer.size > 1: pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc() pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc() pandas\_libs\index_class_helper.pxi in pandas._libs.index.Int64Engine._check_type() KeyError: 'No.'

該当のソースコード

import pandas as pd url_1 = 'https://stooq.com/q/d/?s=7203.jp&i=d&d1=20190401&d2=20190920&l=' i = 1 url = url_1 + str(i) data = pd.read_html(url, header = 0) df_stock = data[1][5:].replace(",","") df_stock.head() for i in range(2,100): url = url_1 + str(i) data = pd.read_html(url) df_stock = df_stock.append(data[1][5:]) if str(data[1]["No."].tail(1)) == 1: break df_stock.head()

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

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

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

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

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

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

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

guest

回答2

0

下記条件式でどうでしょうか?

Python

1if data[29]['No.'].tail(1)==1:

投稿2019/12/11 13:13

meg_

総合スコア10577

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

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

kuro46

2019/12/12 04:15

NameError Traceback (most recent call last) <ipython-input-11-29ccebadc054> in <module> 4 url = url_0 + str(i) 5 data = pd.read_html(url) ----> 6 df_stock = df_stock.append(data[1][5:]).replace(",","") 7 8 if data[29]['No.'].tail(1)==1: NameError: name 'df_stock' is not defined このようなエラーがかえって来ました。
meg_

2019/12/12 08:24

6行目でエラーが出ているので、8行目まで到達してませんね。'df_stock'の定義がないのでエラーになってます。 ※ご質問のコードでは「df_stock = data[1][5:].replace(",","")」と定義されておりますが?
guest

0

KeyError: 'No. ' と言われているので、これは No. というkeyが無いということです。
実際に動かしてみましたが、i=4 の時に同じエラーを再現できました。
実際に i=4 の時のURLのページに飛んで確認していただくとわかると思うのですが、表が存在していません。コード自体は問題ないのですが、表がないことが原因です。

投稿2019/12/11 13:04

kabayan55

総合スコア389

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

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

kuro46

2019/12/12 04:14

if str(data[1]["No."].tail(1)) == 1: 表中のNo.が1になったときに繰り返しを終わるようにしたいと考えていたのですが、実現するのは難しいでしょうか。
kabayan55

2019/12/12 09:09

表があれば表中のNo.を見ることはできているので(i=2,3のときは動いている)、表がないときはスキップするように対処する必要があると思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問