本文へスキップ
ひもとくAI

pandas基礎

レッスン 2/5

DataFrameは「辞書を集めた表」

pandas は、表形式のデータ(スプレッドシートのようなもの)を扱うためのライブラリです。中心となるのが DataFrame というデータ構造です。

以前のレッスンで、辞書は「名前(キー)と値のペア」を管理する仕組みだと学びました。DataFrameは、列の名前をキーに、その列の中身(上から順に並べた値のリスト)を値にした辞書 から作れます。

import pandas as pd

data = {
    "name": ["太郎", "花子", "次郎"],
    "score": [80, 92, 65],
}
df = pd.DataFrame(data)

"name"というキーには名前のリスト、"score"というキーには点数のリストが入っています。それぞれのリストが表の 列(縦の並び)になり、リストの同じ位置の値が同じ 行(横の並び)にそろいます。これは、次のような表になります。

namescore
0太郎80
1花子92
2次郎65

左端の0, 1, 2は行の番号です。リストと同じく0から数えます。

df["score"]のように列名を指定すると、その列だけを取り出せます。これは辞書でstudent["age"]のようにキーを指定して値を取り出したのと、よく似た考え方です。

列の選択・条件での絞り込み・集計

DataFrameから、条件に合う行だけを取り出すこともできます。

df["score"] >= 80        # [True, True, False] (各行が条件を満たすか)
df[df["score"] >= 80]    # 条件を満たす行だけの表

df["score"] >= 80は、以前Pythonのif文で書いていた条件判定を、DataFrameの各行に対して一括で行っている、とイメージしてください。そしてdf[条件]のように書くことで、その条件を満たす行だけを取り出せます。

条件を満たす行の 数 を知りたいときは、(df["score"] >= 80).sum()と書けます。Pythonでは、計算の中でTrueは1、Falseは0として扱われるため、Trueの数がそのまま合計になるからです(この例では2)。この「Trueは1、Falseは0」という性質は、後の章でもよく使います。

集計もNumPyと同じような感覚で行えます。

df["score"].mean()  # score列の平均
df["score"].max()   # score列の最大値

pandasは、この後の単元で「実際のデータセットを読み込んで、傾向を調べる」という作業の中心的な道具になります。このコースでは、ライブラリに付属しているデータを使うため、ファイルを読み込む必要はありません。自分で集めたデータを使うときは、表計算ソフトから保存したCSVファイルをpd.read_csv("ファイル名.csv")で読み込めることを覚えておきましょう。欠損値の扱いは、この章の前処理のレッスンで学びます。

演習

演習を読み込んでいます…