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] の違いはどれか。
- 両方とも同じ結果を返す
- loc は3行(0,1,2)、iloc は2行(0,1)を返す
- loc は2行、iloc は3行を返す
- loc は列指定、iloc は行指定
こたえを見る
正解: 2. loc は3行(0,1,2)、iloc は2行(0,1)を返す
loc は3行(0,1,2)、iloc は2行(0,1)を返す。 loc は両端を含むスライス、iloc は終端を含まないスライス。 この差はDS検定で頻出のひっかけポイントです。