【Python】pandasの使い方をexcelに例えてまとめる

困っている会社員

  • pandasってよく聞くライブラリだけど便利なのかな、何ができるんだろう?
  • 仕事でexcelをよく使うんだけど、pandasを使えると効率化できるのかな?

こんな疑問を解消します

データを扱う際にとても便利なライブラリであるpandas。業務効率化のためにPythonを勉強し始めたのであれば、強力なツールになります。

しかしその便利さは使い慣れるまでイメージが湧きにくいかもしれません。

この記事では、Pythonの初心者向けにpandasの便利さを伝えるため、馴染みのあるexcelを例にとりながら基本的な操作を解説していきます。

この記事でわかること
  • pandasの基本的な操作方法(読み込み・書き出し・結合等)
  • pandasの具体的な利用イメージ
この記事を書いている人
Python勉強中のサラリーマン。Python実践データ分析100本ノックをやりきり、pandasの便利さに気づきました。自身の学習成果のアウトプット・備忘も兼ねて初心者にわかりやすい形でpandasの使い方をまとめます。

Pythonでpandasの使い方を学ぶためのデータ(excel)

これからpandasの使い方を紹介するために簡単なexcelのデータを2つ用意しました。果物屋さんの想定です。

pandasで読み込むexcelデータ

1つ目のデータは果物の仕入履歴データ。仕入日、商品、仕入個数のカラムがあります。

2つめのデータは果物の仕入金額テーブル。商品、仕入単価のカラムがあります。

これらのデータを使いながら、pandasの使い方を解説していきます。下記の順番で説明していきます。

  • excelデータの読み込み
  • データの結合(excelでいうvlookup)
  • データの集計Ⅰ(エクセルでいうsumif)
  • データの集計Ⅱ(エクセルでいうpivot)
  • データの書き出し
先にコードの全体像を載せておきます。pandasを使うならjupyter notebookを使うとコード処理結果を対話式で確認できるので便利です。

Anacondaを使っていれば、インストール不要ですぐに使えます。まだ使ったことがなければ下記の記事(外部サイト)がわかりやすいのでインストールしてみてください。

参考 図解!Jupyter Notebookを徹底解説!(インストール・使い方・起動・終了方法)

※縦にスクロールすると最後までみれます

pandasでexcelデータを読み込む

pandasのインポートとexcelファイルの読み込み

Pythonでデータを処理するために、まずはexcelファイルを読み込みます。

1行目で pandasをインポート。毎回”pandas”と打ち込むのが面倒なので、 pdとしてインポートします。

2行目がエクセルの読み込み。 buy_dateに読み込みたいexcelデータを格納します。今回はexcelデータの読み込みですが、csvデータの読み込みの場合はread_excelread_csvとすればOKです。

データがしっかり読み込まれているかhead()で確認しましょう。

引数に何も指定しなければ、最初の5行が表示されます。10行見たければhead(10)とすればいいですね。

逆にデータの末尾を確認したければ、tail()を使えば確認できるので試してみてください。

同じ要領で仕入金額データも読み込みます。

これで使いたいデータの読み込みが完了しました。下記の通り読み込んでいます。

読み込んだデータ
  • 仕入日付:buy-date
  • 仕入単価:price

pandasでデータ結合する(excelでいうvlookup)

仕入日付データ(buy-date)には仕入単価情報がないので、このままでは仕入金額を計算できません。

excelだったら商品をキーにvlookupを使って仕入単価を持ってくるんだけどなー

pandasの場合はmergeを使います。

pandasのmergeでデータ結合する

結合後のデータをjoin_dataとし、mergeを使って必要なデータを引っ張ります。

mergeの文法

①は結合したいデータ。カンマ区切りで結合したいデータを指定します。

②は結合するためのキー。今回はpriceから商品をキーにして仕入単価を持ってきます。

③は結合方法。buy_date(①で左側に記述)をメインにpriceの情報を持ってきたいのでleftを指定。逆であればrightを指定すればOKです。

これでjoin_dataに必要な情報が揃いました。仕入単価がわかったので、仕入金額(仕入個数*仕入単価)を計算する列を追加しましょう。
pandasで計算列を追加

左辺で新しく追加したい列名を定義し、右辺に計算式を記述します。このように、pandasではデータ名[“列名”]で列を指定できます。

excelと同じくらい直感的に操作できますね。

pandasでデータを集計する①(excelでいうsumif)

join_dataを使って、仕入日ごとの仕入金額を集計してみましょう。

excelだったらsumifを使えば、仕入日ごとに集計できそうだなー

pandasではgroupbyを使います。

pandasのgroupbyでデータ集計

groupbyを使って、仕入日ごとの仕入金額合計を集計した新しいデータフレーム(date_price)を定義します。

pandasのgroupby

①で集約したい列を指定します。今回は仕入日ごとに集計したいので、仕入日の列を指定していますが果物ごとに集計したいなら商品を指定すればOKですね。

②では集計方法を指定します。合計したいのでsum()としていますが、平均であればmean()、最大値であればmax()など集計のバリエーションは多いです。

pandasでデータ集計する②(excelでいうpivot)

excelでデータ集計する場合、sumifよりもpivotテーブルを使った方が効率がいいケースの方が多いでしょう。

先にコードと集計結果を示します。仕入日ごとに商品をいくつ仕入れたか集計してみます。

pandasでpivot

引数が多くて複雑そうだなー

確かに一見複雑そうですが、excelでpivotテーブルを作る場面を想像すると理解が進みます。

pandasでpivot

①は集計対象のデータフレーム。

②③④はエクセルのpivotでいうと

excelのpivotイメージ

エクセルのpivotではおなじみのGUIですが、上で記述したコードはそれぞれ上記の部分に相当します。

最後に⑤ですが、これを記述しないと集計対象がなかった場合にNaNと表示されるので、それを防ぐために記述しているものです。

pandasで集計したexcelデータの書き出し

pandasで集計したデータの書き出し

先ほど集計したpivotデータをエクセル形式で保存します。この1行だけでOKです。

pandasを使った実践的なデータ集計をしたい!

この記事ではよくある事例を使いながら、pandasを使ったデータ集計の基本に触れました。

普段excelで行なっているような集計業務はpandasで事足ります。より実践的なデータ分析をしたいのであれば、下記の書籍がおすすめ。



私はこの本を読むまでpandasに触れたことがありませんでしたが、100本ノックをやりきることでだいぶ使えるようになってきました。

実際の業務では汚いデータ(欠損や表記の揺れがある)を扱うことの方が多いですが、そういったデータを扱うための前処理を丁寧に解説してありました。

私にとっては難しい部分もありましたが、ProgateのPythonをきっちりこなせばなんとかなるレベルです。

以上です!ここまで読んでいただき、ありがとうございました!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です