pagetakaBlog

最近リフォームと鳥取県日南町の記事多め。写真、PC、ネット等の話題も

Python:Pandasでweb上のエクセル(XLS)取得し、ターミナル出力(VSCode)

東証上場銘柄一覧(xls)を読み込んで、VSCodeターミナルに表示…ができたみたいです。

【PandasでWeb上のExcel読込み、VSCode画面に表示】
【PandasでWeb上のExcel読込み、VSCode画面に表示】

前説:ネット上のExcelファイルをDLし保存せずそのままPythonで処理したかった。

東証サイトから上場銘柄一覧(xls)を取得し、VSCodeターミナルに出力するのに手間取っていました。
Pythonスクリプト内でDLし、PC内へExcelファイルとして保存・閉じる。その後、保存したファイルをPythonで開いて、閲覧とか処理…みたいな手順がネット上で最初に見つかっていました。いやぁ~、URLにアクセスした後、保存を省き、処理に持ちこめないものかと、ネット徘徊しておりました。

pandas.io.excel.read_excel(url,etc) でDataframeに取り込めるらしいというのが、まずわかりました。

解決のキッカケになったページは、「<Python, urllib> インターネット上のExcelファイルを読み込む。 - ねこゆきのメモ」(出典:ねこゆきのメモ)でした。ページ最後の方にpandas使えば「直接ExcelファイルをデータフレームDataFrameに取り込める、、、」(同)と説明があり、ドンピシャな内容です。

確認で「Search — pandas 1.6.0.dev0+100.gfe9e5d023e documentation」(投稿日現在最新version1.6)に検索語「io.excel.read_excel」を放り込みますが、うまくヒットしません。
pandas.io.excel.read_excel — pandas 0.15.2 documentation」(2014年12月)が検索で直接ヒットしました。

Pythonスクリプト

試しに書いてみたのが以下のスクリプトです。

#東証公開xlsから、銘柄コード、銘柄名、市場区分、業種名など取得
import pandas as pd
#東証サイト https://www.jpx.co.jp/markets/statistics-equities/misc/01.html にLINKがあるxlsが対象
url = 'https://www.jpx.co.jp/markets/statistics-equities/misc/tvdivq0000001vg2-att/data_j.xls'
#pandasでURLにアクセス→取得→ターミナル表示
# df = pd.io.excel.read_excel(url, header = 0,index_col = 1) #0=1行目見出し、1=キー列は2列目(銘柄コード)
df = pd.read_excel(url, header = 0,index_col = 1) #0=1行目見出し、1=キー列は2列目(銘柄コード)
print(df.index.values[0]) # 1301=index行(銘柄コード)のうち見出し行を除く最初の値

実行結果「1301」がターミナル画面に表示されたらOK…のつもりです。
DL応答、DL完了までの待ち合わせ時間など爺にはよくわからないことがありますが、ともあれ、web上のExcelファイルも、pandas使って読み込めばデータフレーム(Dataframe)になるみたい、というのがわかりました。

新しいPandasに同じ記載がないということは、安定書式か…、ハテ?…。

Pandas「リリースノート」、変更・削除・追加などがあったことを次々とバージョンを上げて知らせてくれている、と考えれば2014年末以降「io.excel.read_excel」の記法変更等は無く、現在まで使える、ということなんでしょうね。実際、爺も使ってみましたし…。

pandas.read_excel(url, etc) でも読込み処理できるみたい。

しかし…ということで「io.excel」を削除し使ってみました。以下がそのスクリプトです。表示対象を変更してますが…。

#東証公開xlsから、銘柄コード、銘柄名、市場区分、業種名など取得
import pandas as pd
#東証サイト https://www.jpx.co.jp/markets/statistics-equities/misc/01.html にLINKがあるxlsが対象
url = 'https://www.jpx.co.jp/markets/statistics-equities/misc/tvdivq0000001vg2-att/data_j.xls'
#pandasでURLにアクセス→取得→ターミナル表示
# df = pd.io.excel.read_excel(url, header = 0,index_col = 1) #0=1行目見出し、1=キー列は2列目(銘柄コード)
df = pd.read_excel(url, header = 0,index_col = 1) #0=1行目見出し、1=キー列は2列目(銘柄コード)
#print(df.index.values[0]) # 1301=index行(銘柄コード)のうち見出し行を除く最初の値
print(df.index.values,df.values) # 銘柄コードとそれ以外の項目データのうち最初と最後のあたり(中略状態)で表示される

これでも求めた内容がターミナル画面に表示されるんですよね…。え゛~!という、知らないことは恐ろしいことだと…。今まで何を苦労してたんでしょうね。最初から、何も考えずPathをURLに読み替えて使っていれば、成功していた…の・か・な?

Dataframe 関係

まだよくわからないです、爺は。参考にしたサイト頁を記載します。
oeconomicus.jp
www.self-study-blog.com

※耄碌爺が、イロイロ暴走・妄想しながら、なんとなく少しわかったかも、と確信(≒ほぼ妄想・幻覚・妄信)したことを記事にしました。心暖かい諸兄のアドバイスお待ちしています。

9/13追記:DataFrame関係、少しわかった…ような雰囲気(≒ほぼ「妄想」か…)

DataFrame関係、別記事でUPしました。
pagetaka.hatenablog.jp

耄碌爺の、大きな勘違いかもしれませぬ。どうぞ、安心なさらず注意深く閲覧のほど。