PythonのPandasにおけるaxis
は、DataFrame
やSeries
などのデータ構造に対して操作の方向(軸)を指定するための非常に重要なパラメータです。
データを行と列の2次元構造として理解することで、axis
の意味がより明確になります。
目次
Pandasにおける「axis」の基本的な考え方
Pandasのaxis
は、以下のように数値で指定されます。
axis | 意味 | 操作の方向 |
---|---|---|
0 | 行方向(縦) | 上から下へ処理(列単位で処理) |
1 | 列方向(横) | 左から右へ処理(行単位で処理) |
具体例で理解する axis
以下のようなDataFrame
を使って説明します。
import pandas as pd
# 基本となるデータフレーム
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6]
})
print("▼ DataFrameの中身")
print(df)
df.sum(axis=0)
の場合 → 行方向に計算(列単位で合計)
# axis=0:行方向に処理 → 列ごとの合計
col_sum = df.sum(axis=0)
print("\n▼ axis=0(列ごとの合計)")
print(col_sum)
- これは、各列の合計(A列: 1+2+3、B列: 4+5+6)を返しています。
axis=0
は「行方向に処理 → 列ごとに計算」という意味です。
df.sum(axis=1)
の場合 → 列方向に計算(行単位で合計)
# axis=1:列方向に処理 → 行ごとの合計
row_sum = df.sum(axis=1)
print("\n▼ axis=1(行ごとの合計)")
print(row_sum)
- これは、各行の合計です。
axis=1
は「列方向に処理 → 行ごとに計算」という意味になります。
主な関数での axis
の使われ方一覧
関数 | axis=0 の意味 | axis=1 の意味 |
---|---|---|
sum() | 各列の合計(行方向に集約) | 各行の合計(列方向に集約) |
mean() | 各列の平均 | 各行の平均 |
drop() | 行を削除 | 列を削除 |
apply() | 各列に関数を適用 | 各行に関数を適用 |
sort_values() | 指定した列で並び替え | 行ラベルで並び替え(やや特殊) |
よくある混乱点
axis=0
は「行を対象にする」のではなく「行方向に処理する(つまり列に対して適用される)」ことを意味します。- 「どの方向に沿って処理を進めるか」という視点で考えると覚えやすくなります。
補足:NumPyとの共通性
Pandasは内部的にNumPyを使っているため、axis
の概念はNumPyと一致しています。
例えば、NumPyでも np.sum(arr, axis=0)
などと使いますが、方向の考え方は同じです。
実践: drop()
での使い方
行を削除(index指定)
# index=0 の行を削除
df_drop_row = df.drop(index=0, axis=0)
print("\n▼ 行を削除(index=0, axis=0)")
print(df_drop_row)
→ インデックス0の行が削除されます。
列を削除(列名指定)
# 'A'列を削除
df_drop_col = df.drop(columns='A', axis=1)
print("\n▼ 列を削除('A'列, axis=1)")
print(df_drop_col)
→ ‘A’列が削除されます。
※ drop()
では axis
を省略して columns=
や index=
を使うのが一般的です。
まとめ: axis
の覚え方
axis=0
→ 上から下へ → 列方向に処理(行を対象に集約/削除など)axis=1
→ 左から右へ → 行方向に処理(列を対象に集約/削除など)
視覚的には以下のイメージです。
axis=0(縦方向処理) → 列ごとに操作
axis=1(横方向処理) → 行ごとに操作
最後に一言
Pandasのaxis
は、データ分析を正しく行うための「方向感覚」のようなものです。
これを正確に理解することで、集約・変換・削除・整形などの処理が格段に直感的になります。
もしaxis
をどっちにするかで迷ったら、「列ごとに処理するなら axis=0、行ごとに処理するなら axis=1」という原則を思い出してください。
以上、PythonのPandasのaxisについてでした。
最後までお読みいただき、ありがとうございました。