Pandas Series.median() 関数
Series.median()Pandas で Series の中央値(中間値)を計算するための関数です。中央値はデータを並べ替えた後に中央の位置にある値であり、極端な値の影響を受けず、データの中心傾向を表すロバストな指標です。
データに外れ値や歪んだ分布が存在する場合、中央値は平均値よりもデータの中心位置を正確に反映できます。収入データ分析、住宅価格統計、成績分析などのシーンでよく使用されます。
基本構文とパラメータ
median()Series オブジェクトのメンバー関数であり、ドット演算子で直接呼び出します。
構文形式
Series.median(axis=None, skipna=True, level=None, numeric_only=None, **kwargs)
パラメータの説明
| パラメータ | 型 | 説明 | デフォルト値 |
|---|---|---|---|
| axis | int | 軸を指定します。Series は1行のデータしかないため、このパラメータは主に DataFrame との互換性のためにあります。 | None |
| skipna | bool | True の場合、計算時に NaN 値をスキップします。False の場合、NaN に遭遇すると結果は NaN を返します。 | True |
| level | int または str | Series が MultiIndex(多層インデックス)の場合、計算する階層を指定します。 | None |
| numeric_only | bool | True の場合、数値型データのみに対して計算します。それ以外の場合は数値への変換を試みます。 | False |
戻り値
- 戻り値の型:
float - 説明:Series 内のすべての要素の中央値を返します。要素数が偶数の場合は、中央の2つの要素の平均値を返します。
例
簡単なものから複雑なものまでの一連の例を通して、Series.median()の使い方を完全に習得しましょう。
例1:基本的な使い方 - 奇数個の要素の中央値
奇数個の要素のデータの場合、中央値は並べ替えた後に中央に位置する値です。
例
import pandas as pd
# 従業員の収入を含む Series を作成
# ある部門の7名の従業員の月収をシミュレーション(単位:千元)
income = pd.Series([5, 6, 7, 8, 9, 10, 50])
# 中央値を計算
median_income = income.median()
print("従業員の月収(千元):")
print(income)
print()
print(f"平均収入:{income.mean():.2f} 千元")
print(f"中央値収入:{median_income} 千元")
print()
print("注意:平均値は極端な値(50千元)の影響を大きく受けますが、中央値は実際の水準をより反映できます。")
# 従業員の収入を含む Series を作成
# ある部門の7名の従業員の月収をシミュレーション(単位:千元)
income = pd.Series([5, 6, 7, 8, 9, 10, 50])
# 中央値を計算
median_income = income.median()
print("従業員の月収(千元):")
print(income)
print()
print(f"平均収入:{income.mean():.2f} 千元")
print(f"中央値収入:{median_income} 千元")
print()
print("注意:平均値は極端な値(50千元)の影響を大きく受けますが、中央値は実際の水準をより反映できます。")
実行結果:
员工月收入(千元): 0 5 1 6 2 7 3 8 4 9 5 10 6 50 dtype: int64 平均收入:13.57 千元 中位数收入:8.0 千元
コード解説:
- データを並べ替えた後:[5, 6, 7, 8, 9, 10, 50]
- 中央の位置は4番目の要素(インデックス3)で、値は8です。
- 極端な値(50)があるため、平均値(13.57)は引き上げられますが、中央値(8)は大多数の人の収入水準をより反映できます。
例2:偶数個の要素の中央値
偶数個の要素のデータの場合、中央値は中央の2つの要素の平均値です。
例
import pandas as pd
# 6個の要素を含む Series を作成
# 6名の学生の試験結果をシミュレーション
scores = pd.Series([75, 82, 88, 92, 95, 100])
# 中央値を計算
median_score = scores.median()
print("学生の試験結果:")
print(scores)
print()
print(f"平均点:{scores.mean():.2f}")
print(f"中央値:{median_score}")
# 6個の要素を含む Series を作成
# 6名の学生の試験結果をシミュレーション
scores = pd.Series([75, 82, 88, 92, 95, 100])
# 中央値を計算
median_score = scores.median()
print("学生の試験結果:")
print(scores)
print()
print(f"平均点:{scores.mean():.2f}")
print(f"中央値:{median_score}")
実行結果:
学生考试成绩: 0 75 1 82 2 88 3 92 4 95 5 100 dtype: int64 平均成绩:88.67 中位数成绩:90.0
コード解説:
- データを並べ替えた後:[75, 82, 88, 92, 95, 100]
- 中央の2つの要素は88と92(インデックス2と3)です。
- 中央値 = (88 + 92) / 2 = 90。
例3:欠損値を含むデータの処理
skipnaパラメータによって欠損値の処理方法が決まります。
例
import pandas as pd
import numpy as np
# 欠損値を含む Series を作成
data_with_nan = pd.Series([10, 20, np.nan, 30, 40, np.nan, 50])
print("欠損値を含むデータ:")
print(data_with_nan)
print()
# デフォルトは skipna=True で、NaN をスキップして中央値を計算
median_skipna = data_with_nan.median()
print(f"skipna=True(デフォルト)の場合の中央値:{median_skipna}")
# skipna=False を設定
median_no_skipna = data_with_nan.median(skipna=False)
print(f"skipna=False の場合の中央値:{median_no_skipna}")
import numpy as np
# 欠損値を含む Series を作成
data_with_nan = pd.Series([10, 20, np.nan, 30, 40, np.nan, 50])
print("欠損値を含むデータ:")
print(data_with_nan)
print()
# デフォルトは skipna=True で、NaN をスキップして中央値を計算
median_skipna = data_with_nan.median()
print(f"skipna=True(デフォルト)の場合の中央値:{median_skipna}")
# skipna=False を設定
median_no_skipna = data_with_nan.median(skipna=False)
print(f"skipna=False の場合の中央値:{median_no_skipna}")
実行結果:
包含缺失值的数据: 0 10.0 1 20.0 2 NaN 3 30.0 4 40.0 5 NaN 6 50.0 dtype: float64 skipna=True(默认)时的中位数:30.0 skipna=False 时的中位数:nan
コード解説:
- 有効なデータ:[10, 20, 30, 40, 50]、合計5つの要素。
- 並べ替えた後の中央の値:30。
skipna=Falseの場合、NaN が1つでもあれば NaN を返します。
例4:平均値と中央値を比較する適用シーン
歪んだデータを処理する際の中央値の利点を示します。
例
import pandas as pd
# ある住宅地の10世帯の月収データをシミュレーション
# 大多数の人の収入は3000〜5000元ですが、少数の高所得者がいます
income_data = pd.Series([3000, 3500, 3800, 4000, 4200, 4500, 4800, 5000, 8000, 50000])
print("住宅地の住民の月収データ(元):")
print(income_data)
print()
mean_income = income_data.mean()
median_income = income_data.median()
print(f"平均値:{mean_income:.2f} 元")
print(f"中央値:{median_income} 元")
print()
print("分析:")
print("平均値(10380元)は極端な値(50000元)によって大幅に引き上げられました。")
print("中央値(4350元)は大多数の住民の実際の収入水準をより反映できます。")
print("これが、統計部門が収入データを公表する際に中央値をより頻繁に使用する理由です。")
# ある住宅地の10世帯の月収データをシミュレーション
# 大多数の人の収入は3000〜5000元ですが、少数の高所得者がいます
income_data = pd.Series([3000, 3500, 3800, 4000, 4200, 4500, 4800, 5000, 8000, 50000])
print("住宅地の住民の月収データ(元):")
print(income_data)
print()
mean_income = income_data.mean()
median_income = income_data.median()
print(f"平均値:{mean_income:.2f} 元")
print(f"中央値:{median_income} 元")
print()
print("分析:")
print("平均値(10380元)は極端な値(50000元)によって大幅に引き上げられました。")
print("中央値(4350元)は大多数の住民の実際の収入水準をより反映できます。")
print("これが、統計部門が収入データを公表する際に中央値をより頻繁に使用する理由です。")
実行結果:
小区住户月收入数据(元): 0 3000 1 3500 2 3800 3 4000 4 4200 5 4500 6 4800 7 5000 8 8000 9 50000 dtype: int64 平均值:10380.00 元 中位数:4350.0 元
注意事項
- 中央値は極端な値に影響されにくく、平均値よりもロバストです。
- データ数が偶数の場合、中央値は中央の2つの数値の平均値です。
- データに明らかに歪んだ分布がある場合、中央値は平均値よりもデータの中心位置を反映できます。
skipnaパラメータの動作はmean()と同じです。
まとめ
Series.median()はデータの中心傾向を表す重要な関数です。主な特徴は次のとおりです:
- 極端な値の影響を受けず、計算結果がロバストです。
- 偶数個の要素の場合、中央の2つの要素の平均値を返します。
- 収入、住宅価格など歪んだ分布が存在するデータ分析で特に有用です。
- 構文とパラメータは
mean()と完全に同じで、学習と使用が簡単です。
実際のデータ分析では、データの分布特性をより包括的に把握するために、平均値と中央値を同時に計算することをお勧めします。両者の差が大きい場合、データに歪んだ分布や外れ値が存在する可能性があります。
その他の拡張
Pandas よく使われる関数