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

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

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

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

Q&A

解決済

2回答

1441閲覧

pandasのread_htmlでheader=Noneにしても1行目が読み込まれる

barobaro

総合スコア1286

pandas

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

0グッド

0クリップ

投稿2019/04/10 09:09

前提・実現したいこと

pandasのread_htmlでheader=Noneにしても1行目が読み込まれる

該当のソースコード

python

1import pandas as pd 2 3url = 'http://www.jfl.or.jp/jfl-pc/view/s.php?a=1411&f=2019A001_spc.html' 4dfs = pd.read_html(url, header=None, skiprows=1, na_values='-') 5 6print(dfs[0].columns) 7

試したこと

Colaboratory
pandas==0.22.0
Int64Index([0, 1, 2, 3, 4, 5, 6], dtype='int64')
問題なし

Windows
pandas==0.23.4
Int64Index([0, 1, 2, 3, 4, 5, 6], dtype='int64')
問題なし

Windows
pandas==0.24.2
Index(['03月17日(日)', '13:00', 'Honda FC', '1-1', '松江シティFC', '都田', '詳細 公式記録'], dtype='object')
問題あり

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

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

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

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

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

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

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

tiitoi

2019/04/10 09:14

以前は問題なく、0.24.2 ではそのような現象が起きたということでしょうか?
barobaro

2019/04/10 10:47

上記以外は試していませんが最新の0.24.2が動かないです。
tiitoi

2019/04/10 11:55

0.23.4 で動作することが確認できているのであれば、pip でバージョンを戻せばいいのではないでしょうか
tiitoi

2019/04/10 11:58

こちらでも試しましたが、確かに 0.23.4 では意図通り動き、0.24.2 では質問欄のようになりますね。pip install pandas==0.23.4 でバージョンを戻せます。
barobaro

2019/04/10 12:07

ありがとうございます。バージョン戻せれました。
guest

回答2

0

ベストアンサー

すでに解決しておりますが、気になりましたので少し調べてみました。

Version 0.24.0 のリリースノートによると read_html() に2点ほど変更が入ったようです。


read_html() copies cell data across colspan and rowspan, and it treats all-th table rows as headers if header kwarg is not given and there is no thead (GH17054)


read_html() no longer ignores all-whitespace <tr> within <thead> when considering the skiprows and header arguments. Previously, users had to decrease their header and skiprows values on such tables to work around the issue. (GH21641)


ソースコードレベルで追った訳ではないので、あくまでも推測になりますが、今回の挙動の原因は1つ目の変更の後半部に起因するものなのではないでしょうか。

対象となるTableは <thead></thead> が存在していないので、0.23 までは Headerが無いテーブルとして処理されていたのが、この変更により <thead></thead> が無い場合は <tbody></tbody> の1行目がヘッダとして扱われるようになり、更に skiprows=1 が指定されているので2行目がヘッダとして処理されているという事のような気がします。

ただ、ヘッダー行を指定したくない場合、 header=Nodeのパラメータが動作しないのは解せないですね・・・。
バグなのかもしれませんので、とりあえずは旧バージョンで逃げるというのは正解かもしれません。

あとはどちらの仕様でも使用できるように

Python

1pandas_version = list(map(int, pd.__verson__.split('.'))) 2if (pandas_version[0] == 0) and (pandas_version[1] < 24): 3 # 0.23 以前のバージョンの処理 4else: 5 # 0.24 以降のバージョンの処理

のようにバージョンによって処理を分ける方法でも良いかもしれません。

投稿2019/04/10 23:58

magichan

総合スコア15898

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

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

barobaro

2019/04/11 00:22

お調べいただきどうもありがとうございます。 headerはデフォルトでNoneなため一応指定してみましたがだめだったので とりあえずバグが治るまでしばらく旧バージョンを使ってみます。
guest

0

最新の0.24.2では動かないため

pip install pandas==0.23.4

でバージョンを戻す

投稿2019/04/10 12:08

barobaro

総合スコア1286

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問