こんにちは、まゆみです。
Pandasについてシリーズで記事を書いています。
今回は第8回目の記事になります。
前回の記事では、世界の大学ランキングのデータを使い、PandasでSeries オブジェクトを作った後、大学のランキング(インデックス)を使って大学名を取り出しました。
自動的に挿入される数字のインデックスを利用すれば
世界の1位から10位までの大学を知りたい
世界の15位の大学名を知りたい
と言った時に便利です。
では、大学名をインデックスにしてその大学の情報を取り出すことは可能でしょうか?
例えば
"University of Tokyo"はどこの国にあるの?"
"University of Oxford"の国内でのランクは?
のような情報の使い方をしたい時、大学名をインデックスにすると便利ですよね
この記事を読めば
- EXCELデータの読み込み方
- EXCELデータからSeriesオブジェクトの作り方
- パラメーターindex_colの意味
- Seriesからデータの範囲を指定するときの注意点
が分かります。
#今回使うEXCELデータ
前回の記事と同じく、data.worldさんのこちらのデータを使わせていただきます
(もしあなたが、CSVファイルのデータを使いたい時はこちらの記事を参考にどうぞ)
※データを読み込んだ後は、EXCELデータでもCSVデータでも手順は同じです。
#EXCELデータを読み込む
import pandas as pd
pd.read_excel("ファイル名")
でEXCELデータを読み込みます。
read_excel()で読み込むとPandasのDataFrameとして読み込まれるので、DataFrame からSeries オブジェクトを作りましょう。
(DataFrame やSeries の違いが分からない方はこちらの記事を参考にどうぞ)
ただ今回はSeries オブジェクトを作ったら勝手に挿入される数字のインデックスを使うのではなく、大学名をインデックスにしてデータを調べていきたいので、
パラメーターusecols=に2つのコラム名を入れ、2つのコラムを取り出します
##index_col でコラムのうち1つをindex にする
先ほど取り出した2つのコラムのうちインデックスのように使いたい方のコラム名を指定します
read_excel のパラメーター index_col に
read_excel(index_col="インデックスとして使いたいコラム名")
と引数の値を書きます
上のスクショのようにコードを書きました。
実行結果は下記のようになり、大学名をインデックスにしたSeries オブジェクトができました。
#Series を使ってみる
ではさっそくSeries を使ってみます
今回は
index に大学名 (Institution)
data に大学の所在する国名(Location)
にしましたが、National Rank やQuality of Education ...と言ったコラムもデータには含まれていますので、あなたの好きなように加工してみてくださいね。
##python の辞書型のようにデータを取り出す
pythonでは、
dict["key"]
実行結果:value
とデータを取り出すことができました。
同じ要領で、
Series["index名"]
とすればそのindex 名に対応するデータを取り出すことができます
##注意点
University of Tokyo から Kyoto University の間のランクに位置する大学を調べてみましょう
範囲なのでpythonに入っている機能の範囲指定と同じく
[ start : stop ]
と書けばいいのですが、Series の場合stop の値も含めて表示されます。
stopの値は除外されるpython との違いに注意です。
データの最初から University of Tokyo までの大学を取りたい時
[:"University of Tokyo"]
とする時も同様に、University of Tokyo が含まれたデータが取り出されます。
##keyerror を避けたい時に使う.get() メソッド
python の辞書型のように key を指定したらデータが取り出されることは分かりました。
しかし、あなたが指定したkey が存在しないと
『keyerror』
が出てしまいますよね。
今回のデータで、もし大学ランキングに入っていない大学名を指定した時も同様に『keyerror』が出てしまいます
例えば、データに入っていない大学名を指定した時にエラーを出すのではなく
This university is not in list
と表示できると良いですよね。
そのような時に使えるのが
.get() メソッドになります
引用元:Pandasドキュメント
.get()メソッドはパラメーターに
key と default を取ることができると書いていますが、どういう意味でしょうか?
key にはインデックス(例えば1番目にあるものを取り出すときの0)でも、大学名("University of Tokyo" など)でも使うことができます
university_rank.get(key=0)
university_rank.get(key="University of Tokyo")
default = None の意味は、例えばkeyの引数に、Series のなかには存在しないインデックスや大学名を指定した時にエラーを出すのではなく、『None』何も出さないという役割をします。
###.get()メソッドのdefault の引数を変えてみる
では今回の実験でしたい事!
大学ランキングのデータ内にない大学名を指定した時に
エラーを出すのではなく、
『This university is not in list』
を表示させることはどうしたら良いのでしょうか?
.get(default= "This university is not in list")
とパラメーターdefault の引数の値をあなたが表示させたい物に変えてください。
今回『Ramen Daigaku』が大学ランキングに入っているか調べてみます
残念っ!
ラーメン大学はランキングに入っていませんでした。
しかし、エラーを出さずに表示させたい文章を表示する事ができました。
#まとめ
今回の記事はこれくらいで終わりにします
まだまだPandasの記事を引き続き書いていきますので、気長にお付き合いくださいませ<(_ _)>
お役に立てれば幸いです。