SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Python in Excel実務入門:Excelデータ分析の新パラダイム

pandasでふぞろいなデータを分析資産に変える

Python in Excel実務入門:Excelデータ分析の新パラダイム 第2回

 前回は、Python in Excelの位置づけと、=PYでコードを書きxl()でデータを取り込む基本操作を確認しました。第2回からは、本連載の主役とも言えるpandasに踏み込みます。この回では、表記ゆれ・欠損・不要な空白・住所など、現場で頻発する前処理を、再現可能な手順へと落とし込む方法を解説します。Excel上で範囲を絞り込み、変換や集計はPythonに委ねる。こうした役割分担が効果を発揮します。

Excel表と相性抜群なDataFrameを理解しよう

 まず、Excelの表をpandasのDataFrameとして読み込み、列名や並びを操作するところまでを確認していきます。

 DataFrameとは、pandasが扱う表形式のデータ構造です。Excelで言う「表(見出し付きの矩形範囲)」とよく似ており、xl()で取り込んだデータがそのままDataFrameになると捉えれば、以降のクレンジングや集計は、すべて「DataFrameに対する操作」として説明できます。

 分析チーム向けの売上スナップショットを想定し、次の表をシートの左上(例:A1:D7)に入力してください。1行目が見出し、2行目以降がデータです。前処理に入る前の準備段階として、ここでは表記ゆれや欠損のない「きれいな表」を使います。

表:整った売上表のサンプル(A1:D7)
商品カテゴリ 地域 売上 数量
スキンケア 東日本 120000 45
メイク 西日本 98000 38
スキンケア 西日本 85000 29
ヘアケア 東日本 64000 22
メイク 東日本 210000 102
ヘアケア 西日本 53000 18

行ラベル(インデックス)と列名(カラム)

 空いているセル(例:F2)を選び、=PY(と入力してPythonセルを開始します。範囲A1:D7は、ご自身の表の位置に合わせて読み替えてください。

python
df = xl("A1:D7", headers=True)
df

 Ctrl+Enterで確定すると、Pythonセルには[PY] DataFrameのようにオブジェクトとして結果が格納されます。セルを選ぶとプレビューは表示されますが、セル幅の都合で文字が見切れて読みにくいことがあります。

 中身を表形式でしっかり確認するには、セル横の挿入データアイコン(緑の+付きボタン)をクリックし、メニューの「フィールド」から「arrayPreview」を選びます。インデックス(行ラベル)付きの表としてシートに展開され、元のExcel表に近い見た目で確認できます。

挿入データアイコンのフィールドからarrayPreviewを選択してDataFrameを表として展開する
挿入データアイコンのフィールドからarrayPreviewを選択してDataFrameを表として展開する
xl()で取り込んだ売上表をDataFrameとして表示
xl()で取り込んだ売上表をDataFrameとして表示

 DataFrameには、行方向のインデックス(行ラベル)カラム(列名)があります。左端に並ぶ0,1,2,…がインデックス、見出しの商品カテゴリ・地域・売上・数量がカラムです。

 Excelで言えば、それぞれ左端の「行番号」と1行目の「見出し」に当たります。カラム一覧はdf.columns、インデックスはdf.indexで確認できます。どちらも後から変更・並べ替えができるため、groupbymergeで「どの列をキーにするか」を考えるときの土台になります。

 左端の0,1,2,…はプレビュー上の行ラベル(インデックス)であり、データ列ではありません。第1回で触れた「Excelの値」としてシートにスピルする場合、こうした既定の数値インデックスは通常セル値には出力されません。

 一方、後述のgroupbyのようにインデックスが「東日本」のような文字列になる場合は、行見出しとして展開されることがあります。

 特定の列を抜き出すときは、セルを1つずつ指定するのではなく**列名でまとまりを指定**します。複数列はリストで渡します。

python
df[["商品カテゴリ", "売上"]]
列名を指定して商品カテゴリと売上を取り出した結果
列名を指定して商品カテゴリと売上を取り出した結果

 このように、必要な列だけを名前で取り出せます。集計や結合の前に対象の列を絞り込む場面で役立ちます。

 列名は後から変更できます。例えばシステム連携で英語名のまま取り込んだ表を、日本語の見出しにそろえたい――renameはそうした場面で使います。

python
df2 = df.rename(columns={"売上": "売上金額", "数量": "販売数量"})
df2
列名を売上金額・販売数量にそろえた結果
列名を売上金額・販売数量にそろえた結果

 元のdfはそのまま残り、df2が新しい表になります(上書きしたい場合はdf = df.rename(...))。列名を統一しておくと、後続のgroupbymergeでキーを指定する際に迷いません。

 同じ要領で、df2[["地域", "商品カテゴリ", "売上金額", "販売数量"]]のように列順を並べ替えたり、df2.set_index("地域")でキー列を行ラベルに移したりもできます。

 並べ替えにはsort_valuesを使います。売上金額の高い順に並べてみましょう。

python
df2.sort_values("売上金額", ascending=False)
売上金額の降順に並べ替えた結果
売上金額の降順に並べ替えた結果

 ランキング形式のレポートを作るときに役立つ操作です。左端の行ラベルが4,0,1,…と元の番号を保ったまま、並びだけが変わっている点に注目してください。インデックスはもともとの「行の名前」であって、位置を指すわけではない点がExcelの行番号との違いです。

列単位での処理

 Excelでは「1セルに数式を書いて、下方向にコピーする」のが基本動作でした。pandasでは、列まるごとに同じ計算を一括適用します。例えば税込売上の列を足すなら、次のコードで済みます。

python
df["税込売上"] = df["売上"] * 1.1
df[["商品カテゴリ", "売上", "税込売上"]]
売上列に税率を一括適用して税込売上列を追加した結果
売上列に税率を一括適用して税込売上列を追加した結果

 Excelなら=C2*1.1を全行にコピーするところを、pandasはdf["売上"] * 1.1という1行で列全体に同じ計算を及ぼします。行数が数千・数万に増えても変わりません。同じ計算をコードブロックとして残せるため、「いつ・どの式で作った列か」を後から追える点も、実務での利点となります。

可読性

 列単位の書き方には、コードが「何をしているか」を読み取りやすいという利点もあります。例えば「東日本で、かつ売上が10万円以上」はdf[(df["地域"] == "東日本") & (df["売上"] >= 100000)]のように、ほぼ日本語の条件文として書けます。

表:Excelの数式とpandas(コード)の比較
観点 Excelの数式(セル参照の反復) pandas(コード)
条件抽出 =IF(AND(B2="東日本",C2>=100000), …)を全行コピー df[(df["地域"]=="東日本") & (df["売上"]>=100000)]の1行
修正のしやすさ しきい値変更時に全行の数式を修正、依存関係が追いづらい 1か所(100000)を直すだけ、差分が一目
再利用 ブックに依存し、手順が残りにくい コードブロックとして保存・再実行で同じ結果

 このように、「セルを1つずつ触る」から「読めるコードで処理する」への発想の切り替えが、pandasを使いこなす第一歩です。次節以降のクレンジングや集計も、この考え方を理解しておくと分かりやすくなります。

次のページ
pandasによる効果的なデータ前処理

この記事は参考になりましたか?

Python in Excel実務入門:Excelデータ分析の新パラダイム連載記事一覧
この記事の著者

WINGSプロジェクト 西 潤史郎(ニシ ジュンシロウ)

WINGSプロジェクト について>有限会社 WINGSプロジェクト が運営する、テクニカル執筆コミュニティ(代表 山田...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/29058 2026/08/03 08:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー