Pandas 基礎(DataFrame・Series・loc/iloc)

DS検定の主役Pandas。DataFrame操作とloc/ilocの違いを完全に押さえます。

DS検定★コード読解の主役、Pandas。DataFrame と Series の操作を押さえます。

白峰 リリ(普段) 白峰 リリ

Pandasって、要は表を扱うやつだよね?

神楽 モニカ 先生(笑顔) 神楽 モニカ 先生

そうよ、DataFrameは2次元の表で、Seriesは1列なのよ。 ExcelをPythonから操作する感覚に近いわね。

紅林 かえで(普段) 紅林 かえで

補足すると、DataFrameは『辞書のリスト』のようなデータ構造。 列名と行ラベルを持っていて、各列は異なる型を取れる。

import pandas as pd

# DataFrame 作成
df = pd.DataFrame({
    'name':   ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'age':    [25, 32, 28, 45, 22],
    'salary': [320000, 510000, 425000, 720000, 290000],
    'dept':   ['Sales', 'Eng', 'Sales', 'Eng', 'HR'],
})

# 基本情報
print(df.shape)         # (5, 4)
print(df.columns)        # 列名
print(df.dtypes)         # 各列の型
print(df.head(3))        # 上3行
print(df.describe())     # 数値列の統計サマリ
藍沢 しずく(普段) 藍沢 しずく

locとilocって、どう違うのぉ?

紅林 かえで(普段) 紅林 かえで

loc は『ラベル(列名・行名)で指定』、iloc は『位置(数値インデックス)で指定』。

# loc: ラベル指定
df.loc[0, 'name']                   # 0行目のname列 → 'Alice'
df.loc[df['age'] >= 30, ['name', 'dept']]  # 条件絞込+列選択
df.loc[0:2]                         # ラベル0〜2(3行が含まれる)

# iloc: 位置指定
df.iloc[0, 0]                       # 0行0列目 → 'Alice'
df.iloc[0:2, [0, 2]]                # 0〜1行目、0列目と2列目

# 新しい列の追加
df['bonus'] = df['salary'] * 0.1
df['age_group'] = df['age'].apply(lambda x: 'シニア' if x >= 40 else '若手')

# フィルタ
high_salary = df[df['salary'] > 400000]
sales_only = df[df['dept'] == 'Sales']
白峰 リリ(普段) 白峰 リリ

loc[0:2]とiloc[0:2]って、結果が違うって聞いたよ?

神楽 モニカ 先生(普段) 神楽 モニカ 先生

そうなのよ、locは両端を含むから(0,1,2の3行)、ilocは終端を含まないから(0,1の2行)になるの。 ここは混乱しやすいから、試験でも頻出ね。

紅林 かえで(普段) 紅林 かえで

DS検定★ では『loc/ilocの違い』『DataFrameの絞り込み』『新しい列の追加』『head/describe等の確認関数』が頻出よ。

確認クイズ

DataFrame df において df.loc[0:2] と df.iloc[0:2] の違いはどれか。

  1. 両方とも同じ結果を返す
  2. loc は3行(0,1,2)、iloc は2行(0,1)を返す
  3. loc は2行、iloc は3行を返す
  4. loc は列指定、iloc は行指定
こたえを見る

正解: 2. loc は3行(0,1,2)、iloc は2行(0,1)を返す

loc は3行(0,1,2)、iloc は2行(0,1)を返す。 loc は両端を含むスライス、iloc は終端を含まないスライス。 この差はDS検定で頻出のひっかけポイントです。

🔖 この記事の関連書籍

Amazonアソシエイトリンクを含みます。他分野は おすすめ書籍ページ へ。