1. pandasとは?なぜ学ぶのか
pandas(パンダス)は、Pythonで表形式のデータを扱うためのライブラリです。 ExcelやCSVのような「行と列で構成された表」を、Pythonのコードで自在に操作できるようにしてくれます。 この表を表す中心的なデータ構造を DataFrame(データフレーム) と呼びます。
データ分析・統計処理・機械学習の前処理など、「データを扱う」あらゆる場面でpandasは事実上の標準です。 医療の世界でも、患者カルテ・検査結果・バイタルデータなど、扱う情報の多くは「患者×項目」の表の形をしています。 pandasを学ぶことは、医療データ分析の土台を身につけることそのものなのです。
🌱 このコースの前提: このコースは Python初学者コース 修了レベル(変数・リスト・辞書・関数の基礎)を前提としています。 NumPyの知識は不要です。「Pythonの基礎がまだ不安」という方は、先に初学者コースを完走してから戻ってくるとスムーズに学べます。
⚠ 初回の読み込みについて: このコースのコードは pandas を使います。pandasは少し大きなライブラリのため、 各ページで最初にコードを実行するとき、読み込みに数秒〜十数秒かかります(2回目以降は速くなります)。 画面上部のバーが消えたら準備完了の合図です。
「それならExcelでいいのでは?」と思うかもしれません。pandasがExcelより優れている点を整理しておきましょう。
| Excel | pandas | |
|---|---|---|
| 大量データ | 数万行で重くなる | 数十万〜数百万行も高速処理 |
| 処理の再現 | 手作業。やり直しが大変 | コードに残る。同じ処理を一瞬で再実行 |
| 自動化 | マクロが必要・複雑 | コードでそのまま自動化できる |
| 他ツール連携 | 限定的 | 機械学習・グラフ・DBとシームレスに連携 |
| 手軽さ | すぐ開けて直感的 | 最初は学習が必要(でも一度覚えれば強力) |
🩺 医療データ文脈: 「100人の患者の検査値から、診断名ごとの平均を出したい」「血圧が基準値を超えた患者だけ抽出したい」—— こうした作業は、Excelだと手作業で時間がかかりますが、pandasなら数行のコードで一瞬です。 しかも同じ処理を、来月の新しいデータにそのまま再利用できます。
2. 最初のDataFrameを作ってみよう
さっそくコードを動かしてみましょう。pandasを使うときは、
import pandas as pd と書いて読み込み、以降は pd という短い名前で呼び出すのが世界共通の慣習です。
一番シンプルなDataFrameの作り方は、辞書(dict)を pd.DataFrame() に渡す方法です。
辞書の「キー」が列名に、「値(リスト)」が各列のデータになります。
💡 DataFrameの構造:
一番左に表示される 0, 1, 2, 3 の番号は index(インデックス=行ラベル) です。
指定しなければ自動で 0 から振られます。上の行に並ぶ 氏名・年齢・BMI・診断名 は columns(列名) です。
「index(行)× columns(列)」でデータの位置が決まる——これがDataFrameの基本です。
3. 列を取り出して集計してみよう
DataFrameの便利さは、列を取り出して一発で集計できるところにあります。
df["列名"] と書くと、その列だけを取り出せます。取り出した列に対して .mean()(平均)や
.max()(最大)などを付けるだけで、集計結果が得られます。
💡 取り出した1列は「Series」:
df["年齢"] で取り出した1列のデータを、pandasでは Series(シリーズ) と呼びます。
「DataFrame(表)の各列はSeries(1列のデータ)」という関係です。
SeriesとDataFrameの詳しい違いは、次のレッスンで扱います。
💡 出力の最後に出る「Name / dtype」の行:
print(df["年齢"]) を実行すると、値の下に Name: 年齢, dtype: int64 という行が出ます。
これは値ではなく、Series の補足情報です。
Name: 年齢… この列(Series)の名前。元の列名がそのまま付きますdtype: int64… データ型(dtype)。int64は「整数」という意味です
表(DataFrame)を print したときには出ない、1列(Series)だけを表示したときの特徴です。
「余計なものが出た」と驚かなくて大丈夫——dtype の詳しい話は次のレッスンで扱います。
🩺 医療データ文脈:
df["BMI"].mean() のように1行書くだけで、患者集団の平均BMIが求まります。
これが100人・1000人のデータでも、コードはまったく同じ。Excelで一人ずつ確認する必要はありません。
「集団の傾向をひと目でつかむ」のがpandasの真骨頂です。
4. describe() でデータの概要を一発表示
データ分析の第一歩は「まずデータ全体を眺める」ことです。
pandasには、数値列の統計サマリ(件数・平均・標準偏差・最小〜最大など)を
たった1行で表示する describe() という便利なメソッドがあります。
💡 describe() の読み方:
count:データの件数(欠損を除く)mean:平均、std:標準偏差(ばらつき)min/max:最小値・最大値25% / 50% / 75%:四分位数(50%は中央値)
数値の列(年齢・BMI)だけが自動的に対象になり、文字列の列(氏名・診断名)は除かれます。
「データを受け取ったら、まず describe()」が分析の定番の入り口です。
5. 練習問題
各セルのコードを書き換えて「▶ 実行」を押してみましょう。「↺ リセット」で元のコードに戻せます。
患者データのDataFrameを作ろう
3人の患者データから DataFrame を作り、表として表示し、shape も確認してください。
列:氏名(山田・伊藤・中村)、年齢(40・58・29)、SBP(最高血圧:130・150・118)
ヒントを見る(答え+解説)
import pandas as pd
# 辞書から DataFrame を作ってください
df = pd.DataFrame({
"氏名": ["山田", "伊藤", "中村"],
"年齢": [40, 58, 29],
"SBP": [130, 150, 118],
})
# 表として表示し、shape も確認してください
print(df)
print("shape:", df.shape) # (3, 3)
辞書の「キー」が列名、「値(リスト)」が各列のデータになります。print(df) で表として表示され、df.shape は (行数, 列数) のタプル=今回は (3, 3) です。
列を取り出して集計しよう
下記の df から SBP(最高血圧)の列を取り出し、平均と最大を表示してください。
ヒントを見る(答え+解説)
import pandas as pd
df = pd.DataFrame({
"氏名": ["山田", "伊藤", "中村", "小林", "加藤"],
"SBP": [130, 150, 118, 142, 125],
})
# SBP の列を取り出し、平均と最大を表示してください
print("平均:", df["SBP"].mean()) # 133.0
print("最大:", df["SBP"].max()) # 150
df["SBP"] で列(Series)を取り出し、.mean()・.max() で集計します。5人のSBPの平均は (130+150+118+142+125)/5 = 133.0 です。
describe() で概要をつかもう
下記の df(5人の年齢・BMI)に対して describe() を実行し、サマリ統計を表示してください。
ヒントを見る(答え+解説)
import pandas as pd
df = pd.DataFrame({
"年齢": [45, 62, 33, 55, 48],
"BMI": [22.5, 28.1, 24.0, 26.2, 23.8],
})
# describe() でサマリ統計を表示してください
print(df.describe())
df.describe() だけで、年齢・BMIそれぞれの件数・平均・標準偏差・最小〜最大・四分位数が一覧表示されます。データを受け取ったらまず実行する、定番の確認手段です。
6. まとめ
このレッスンのポイント
- pandasは表形式データを扱うライブラリ。中心となるのが DataFrame
import pandas as pdで読み込み、pd.DataFrame(辞書)で表を作る- 一番左の番号が index(行ラベル)、上の見出しが columns(列名)
df["列名"]で列(Series)を取り出し、.mean()/.max()で一発集計df.describe()でデータの概要を一目で把握できる
自由に試してみましょう:
完了するとコース一覧に進捗が記録されます