【Pandas】Pandasの集計結果をEXCELファイルに書き込む方法 .no.36

![見出しを追加 (92).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/a5845778-b27a-ee7f-e45d-77fa3f114a64.png)
こんにちは、まゆみです。

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

今回は第36回目になります。

[前回の記事](https://qiita.com/Mayumi_Pythonista/items/c18db3024c38096e1b59)では、CSVファイルに書き込む方法を解説させていただきました。

今回の記事では、Pandasの集計結果を<font color="Red">EXCELファイルに書き込む方法</font>を解説していこうと思います。

ではさっそく始めていきますね。

#EXCELファイルをPandasで扱う時に必要なライブラリー

EXCELファイルを扱うには『xlrd』と『openpyxl』というライブラリーが必要なので、こちらをインストールしていない人は[こちらの記事](https://qiita.com/Mayumi_Pythonista/items/be5744377aff7b1743d8#excel%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%82%80)にインストール方法を書いています。

#今回使うデータ
![見出しを追加 (90).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/092964cd-1649-39d2-7b12-847cdcb10e63.png)


前回の記事で使ったデータと同じ[セントラルパークのリスについてのデータ](https://data.cityofnewyork.us/Environment/2018-Central-Park-Squirrel-Census-Squirrel-Data/vfnx-vebw)を使います。

.read_csv()で読み込むと下記のようになります。

![スクリーンショット 2021-04-10 083929.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/b32643de-92fa-4017-3ce0-def4b5bf9495.jpeg)


『Primary Fur Color』(主な毛の色)というコラムを分類分けした結果(グレー、ブラック、シナモン色に分類できる)をEXCELの別々のワークシートにそれぞれ取り出してみましょう

```
df["Primary Fur Color"] == "Gray"
```

で、Primary Fur Color の値がGray になっているものが、『True』そうでないものが『False』として返されるので(下記参考)

![スクリーンショット 2021-04-10 090628.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/bbb4f4c3-f85b-6630-6e4f-c910fae34313.jpeg)

このbooleanのデータを使って、dataframeからGray がTrue のrow のみを抜き出します

```
df[df["Primary Fur Color"] == "Gray"]
```

これをgrayという変数に代入しました。

![スクリーンショット 2021-04-10 090940.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/d1dab4b0-3b34-9e78-7bd4-4943c6f2dae9.jpeg)

同様にして、black とcinnamon でもそれぞれの値を別々に取り出して変数に代入しました。


![スクリーンショット 2021-04-10 091129.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/de1b7f18-23e5-ecdf-8b37-0bfd25f2924f.jpeg)

Excel ファイルに分けて書きたい物が揃ったところで、さっそくPandasの.to_excel()メソッドのドキュメントを見てみましょう

#.to_excel()メソッドを使う時に必要なパラメーター
![スクリーンショット 2021-04-10 091619.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/4a215e97-639b-458a-49bd-6db86fe57a40.jpeg)
引用元：[Pandasドキュメント](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.to_excel.html)

まず、最初に必要なのが、『ExcelWriter オブジェクト』になります。

Series やDataFrameを作るのと同じ要領で、<font color="Red">ExecelWriter クラスからオブジェクト</font>を作りましょう

##ExcelWriter クラスからオブジェクトを作る

pd.Excelと打ち込んだ時点で『Tab』キーを押せば候補を出してくれます(下のスクショ参考)


![スクリーンショット 2021-04-10 084329.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/f9f3dad7-0e43-78b9-5493-f967783838b8.jpeg)

その中の『ExcelWrite』クラスからオブジェクトを作り、好きな変数に代入します。

##パラメーター『sheet_name』

excelファイルの一番下は

![スクリーンショット 2021-04-10 092416.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/484aa744-ac53-8d4a-f7be-631a784c4762.jpeg)

こんな風になっていますが、.to_excel()のパラメーターsheet_name を使うと、ワークシートに名前を付けることができます。

それぞれのワークシートを

>Gray Squirrels

>Black Squirrels

>Cinnamon Squirrels 

と名前を付けました。

パラメーターindex をTrue にするかFalse にするかは、数字のインデックスを一番前に入れたいかどうかです。

詳しくは[こちら](https://qiita.com/Mayumi_Pythonista/items/c18db3024c38096e1b59#to_csv%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89)に書いてますので、参考にどうぞ

#.save()

今の時点でコードを実行しても、<font color="Red">カレントフォルダーには、エクセルファイルはできていません。</font>

最後、『.save()』でファイルを保存します

.save()はExcelファイルにエクスポートしたいものの処理が全て終わってから最後にします。

.save()が終わればカレントフォルダー内に、ExcelWriterオブジェクトを作る時につけたファイル名がついたエクセルファイルができているはずです。

##エラーが起こる場合もある

以上のプロセスで上手くいく場合もいますが、エラーが出る場合もあります。

![スクリーンショット 2021-04-10 100853.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/71c76eae-80c2-9153-3818-239d2b9c4d5d.jpeg)


原因により、色んな解決方法があると思いますが、私の調べた方法を書いておきますね。

![スクリーンショット 2021-04-10 101048.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/f69abe45-1764-b2b6-5c5f-14847137ac1a.jpeg)
引用元：[stackoverflow](https://stackoverflow.com/questions/48967861/pandas-dataframe-to-excel-gives-file-is-not-utf-8-encoded)

![スクリーンショット 2021-04-10 101631.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/2255d49c-082a-6594-384e-fff1ce9c2854.jpeg)

![スクリーンショット 2021-04-10 101852.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/71a8bb69-3a01-5bd8-eb7f-cbbc87d4158a.jpeg)

無事、ダウンロードしてExcelファイルに毛色で分けたデータを書き出すことができました。


![スクリーンショット 2021-04-10 102042.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/56f88770-face-ded4-4a8d-8f63605b0805.jpeg)

![見出しを追加 (91).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/c649a2b4-5022-b340-74ec-fe4898b69a21.png)

『全てのコラムは要らない。AgeとPrimary Fur Colorのみエクセルファイルに書き出したい』っていう人は、

```
to_excel(columns= ["コラムA", "コラムB"])
```

と.to_excel()のパラメーターcolumnsにリスト型で引数を渡して下さい。

![スクリーンショット 2021-04-10 103928.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/07e045b2-c83c-84b5-51a8-8da79dc6f746.jpeg)

Gray Squirrels タブのデータのみ、毛色と年齢のコラムのみにしてみました。

#まとめ

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

前回扱った、CSVに書き出す方法より少し複雑になります。

でもエクセルファイルに書き出す方が断然見やすいデータになりますよね。

この記事があなたのお役に立てれば幸いです。