Pythonのpandasを使ってデータ加工してみる
はじめに
前回までに、VBA配列とEnumステートメントの活用についてを書きました。
VBA配列とEnumステートメントの活用1 - Kの備忘録(仮)
VBA配列とEnumステートメントの活用2 - Kの備忘録(仮)
今回は、Pythonで同じデータ加工を行う場合、どんな感じのコードになるのかを試してみます。使用するのはpandasというデータ加工に特化したライブラリです。
今回用意したデータ
前回と同じく、e-Statで公開されている2020年の国税調査結果の「人口速報集計(男女別人口及び世帯総数)」に手を加えたExcelファイルを使用します。
ただし、書き込みは前回と異なり、新しいExcelを作成して転記します。理由は後述します。
データの詳細は上記「VBA配列とEnumステートメントの活用1」の記事のe-Statのリンクにてご確認ください。
また、今回はJupyter Notebookを使用します。
今回やりたい処理
こちらはほぼ前回の条件と同じですが、転記先は「新しいExcel ファイル」に変更します。
◆転記項目
- 地域識別コード
- 都道府県
- 人口/総数
- 人口/男
- 人口/女
- 人口密度
- 世帯数
「a01」シートの「地域識別コードが「a」の項目かつ、上記7項目のみ新しいExcel ファイルを作成し「都道府県別総人口」シートへ転記する
pandasライブラリを使用したコード
import pandas as pd path = 'Enum検証国税調査2020年pandas01.xlsx' df = pd.read_excel(path, sheet_name='a01') df2 = df[df['地域識別コード'] == 'a'] df2 = df2[['地域識別コード', '都道府県', '人口/_総数', '人口/男', '人口/女', '人口密度', '世帯数']] path2 = 'Enum検証国税調査2020年pandas02.xlsx' df2.to_excel(path2, sheet_name='都道府県別総人口', index=False, )
コード短い・・・!特別なメソッドなどを使わなくても簡単にデータ抽出して転記できてしまいました。
「どの項目が転記対象か」ということも一目でわかりますね。全体的にコメント書かなくても可読性に問題ないと思います。
解説
Jupyter Notebookでセルを分けて、データの状況を確認していきます。
import pandas as pd path = 'Enum検証国税調査2020年pandas01.xlsx' df = pd.read_excel(path, sheet_name='a01') df.columns
ここでセルを区切って実行すると、以下のように項目(columns)が確認できます。
Index(['地域識別コード', '都道府県', '地域名', '人口/_総数', '人口/男', '人口/女', '2015年(平成27年)の人口(組替)', '5年間の人口増減数', '5年間の人口増減率', '人口性比', '面積(参考)', '人口密度', '世帯数', '2015年(平成27年)の世帯数(組替)', '5年間の世帯増減数', '5年間の世帯増減率'], dtype='object')
転記元データの項目名が問題なく取得できていますね。
次のセルを実行します。
df2 = df[df['地域識別コード'] == 'a'] df2 = df2[['地域識別コード', '都道府県', '人口/_総数', '人口/男', '人口/女', '人口密度', '世帯数']] df2
転記用に「df2」というデータフレームを用意して、対象のレコード(この場合「地域識別コードが「a」の項目)を抽出し、さらに対象の7つのcolumnsを指定しています。
df2の内容は以下のとおりです。
↓の前回のVBAの検証のときと同じ内容ですね!(一番左は「dfのindex」なので、気にしなくて大丈夫です)
次のセルを実行します。
path2 = 'Enum検証国税調査2020年pandas02.xlsx' df2.to_excel(path2, sheet_name='都道府県別総人口', index=False, )
出力したExcel ファイルを確認すると、正しくデータは転記できているのですが、1行目の太字と罫線が気になります・・・。データフレームをExcelファイルに書き込むとこうなってしまうので仕方ないです・
また、pandasのto_excelメソッドでExcel ファイルを書き出すと指定したシート以外消えるという恐ろしい仕様があるので注意です!!!
おそらく他のライブラリを使えばPythonでもちゃんと転記できると思うのですが、今回はデータ加工の部分に重きを置いたため、転記元と同じExcelファイルへの書き出しの諦めました。
pandasについて思ったこと
pandasは少しだけ使ったことがあるのですが、今回のことも含め簡単まとめると以下の3点です。
おわりに
「pandasすごいですね」って改めて思いました。それ以上の言葉が出ない・・・。