【Pandas】ランキングの世界の大学名からデータを取り出す(excelデータ利用)no.8

![見出しを追加 (26).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/feee5e76-902f-ef1b-243f-a8a2465b425b.png)


こんにちは、まゆみです。

Pandasについてシリーズで記事を書いています。

今回は第8回目の記事になります。


[前回の記事](https://qiita.com/Mayumi_Pythonista/items/be5744377aff7b1743d8)では、[世界の大学ランキングのデータ](https://data.world/proydu/world-university-rankings-2019-20/workspace/file?filename=World+University+Rankings+2019-20.xlsx)を使い、PandasでSeries オブジェクトを作った後、大学のランキング(インデックス)を使って大学名を取り出しました。

![見出しを追加 (27).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/66637203-27fc-75a8-cfda-ee265c5ecf6f.png)

自動的に挿入される数字のインデックスを利用すれば

>世界の1位から10位までの大学を知りたい
>世界の15位の大学名を知りたい

と言った時に便利です。

では、大学名をインデックスにしてその大学の情報を取り出すことは可能でしょうか？

例えば

>"University of Tokyo"はどこの国にあるの？"

>"University of Oxford"の国内でのランクは？

のような情報の使い方をしたい時、<font color="Red">大学名をインデックスにする</font>と便利ですよね



この記事を読めば

<ul>
<li>EXCELデータの読み込み方</li>
<li>EXCELデータからSeriesオブジェクトの作り方</li>
<li>パラメーターindex_colの意味</li>
<li>Seriesからデータの範囲を指定するときの注意点</li>


</ul>

が分かります。

#今回使うEXCELデータ

前回の記事と同じく、[data.world](https://data.world/)さんの[こちらのデータ](https://data.world/proydu/world-university-rankings-2019-20/workspace/file?filename=World+University+Rankings+2019-20.xlsx)を使わせていただきます

(もしあなたが、CSVファイルのデータを使いたい時は[こちらの記事](https://qiita.com/Mayumi_Pythonista/items/c29197abd4af408a8d17)を参考にどうぞ)

※データを読み込んだ後は、EXCELデータでもCSVデータでも手順は同じです。

![スクリーンショット 2021-03-15 080550.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/a33686e1-8851-3002-9779-4b8646c3522b.jpeg)

#EXCELデータを読み込む

```
import pandas as pd
pd.read_excel("ファイル名")
```

でEXCELデータを読み込みます。

read_excel()で読み込むとPandasのDataFrameとして読み込まれるので、DataFrame からSeries オブジェクトを作りましょう。
(DataFrame やSeries の違いが分からない方は[こちらの記事](https://qiita.com/Mayumi_Pythonista/items/a252edf67ac6ab517f15)を参考にどうぞ)

ただ今回はSeries オブジェクトを作ったら勝手に挿入される<font color="Red">数字のインデックスを使うのではなく、大学名をインデックスにして</font>データを調べていきたいので、

パラメーターusecols=に２つのコラム名を入れ、2つのコラムを取り出します

![index.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/4bfe33ff-e4bd-49db-e8a9-9446e31e4b1e.png)


##index_col でコラムのうち1つをindex にする

先ほど取り出した2つのコラムのうちインデックスのように使いたい方のコラム名を指定します

read_excel のパラメーター　index_col に

```
read_excel(index_col="インデックスとして使いたいコラム名")
```

と引数の値を書きます

![スクリーンショット 2021-03-15 082649.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/b6bcb52e-6309-a248-1f3e-17789053e6c4.jpeg)

上のスクショのようにコードを書きました。

実行結果は下記のようになり、大学名をインデックスにしたSeries オブジェクトができました。


![スクリーンショット 2021-03-15 083137.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/1b0914ad-dee0-ceaf-244b-25a8ac2c70d0.jpeg)


#Series を使ってみる

ではさっそくSeries を使ってみます

今回は

>index に大学名　(Institution)

>data に大学の所在する国名(Location)

にしましたが、National Rank やQuality of Education ...と言ったコラムもデータには含まれていますので、あなたの好きなように加工してみてくださいね。

##python の辞書型のようにデータを取り出す

pythonでは、

>dict["key"] 

>実行結果：value

とデータを取り出すことができました。

同じ要領で、

>Series["index名"]

とすればそのindex 名に対応するデータを取り出すことができます


![スクリーンショット 2021-03-15 085932.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/92a36c6f-169b-131a-148a-dd9e8c6074c3.jpeg)

##注意点

University of Tokyo から　Kyoto University の<font color="Red">間のランクに位置する</font>大学を調べてみましょう

範囲なのでpythonに入っている機能の範囲指定と同じく

[ start : stop ]

と書けばいいのですが、Series の場合stop の値も<font color="Red">含めて</font>表示されます。

<font color="Red">stopの値は除外されるpython との違いに注意です。</font>

![スクリーンショット 2021-03-15 090304.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/d19aae1b-7e94-67ad-033a-2c5e51d21c0a.jpeg)

データの最初から　University of Tokyo までの大学を取りたい時

[:"University of Tokyo"]

とする時も同様に、University of Tokyo が<font color="Red">含まれた</font>データが取り出されます。


![スクリーンショット 2021-03-15 090705.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/978fbb53-7ba2-f7af-1b3b-c62489db764d.jpeg)

##keyerror を避けたい時に使う.get() メソッド

python の辞書型のように　key を指定したらデータが取り出されることは分かりました。

しかし、あなたが指定したkey が存在しないと

『keyerror』

が出てしまいますよね。

今回のデータで、もし大学ランキングに入っていない大学名を指定した時も同様に『keyerror』が出てしまいます

例えば、<font color="Red">データに入っていない大学名を指定した時にエラーを出すのではなく</font>

```
This university is not in list
```

と表示できると良いですよね。


そのような時に使えるのが

.get() メソッドになります

![スクリーンショット 2021-03-15 100335.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/f9899b02-f70b-a0bf-7b29-5e91c448333a.jpeg)
引用元：[Pandasドキュメント](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.get.html)

.get()メソッドはパラメーターに

<font color="Red">key と　default を取ることができる</font>と書いていますが、どういう意味でしょうか？

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』が大学ランキングに入っているか調べてみます

![スクリーンショット 2021-03-15 102508.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/474f030b-33c8-fe8d-4601-2e31634e4b66.jpeg)

残念っ！

ラーメン大学はランキングに入っていませんでした。

しかし、<font color="Red">エラーを出さずに表示させたい文章を表示する事ができました。</font>


#まとめ

今回の記事はこれくらいで終わりにします

まだまだPandasの記事を引き続き書いていきますので、気長にお付き合いくださいませ<(_ _)>

お役に立てれば幸いです。