Pandas Series.mean() 関数
Series.mean()は、Pandas で Series のすべての要素の平均値を計算するための関数です。平均値は最もよく使用される統計指標の一つであり、データの中心的な傾向を表します。
平均給与、平均売上高、平均成績のいずれを計算する場合でも、mean()素早く計算を完了できます。データの中心的傾向を表す中核的な指標です。
基本構文とパラメータ
mean()Series オブジェクトのメンバー関数であり、ドット演算子で直接呼び出します。
構文形式
Series.mean(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 内のすべての有効な要素の平均値を返します。すべての要素が NaN の場合、NaN を返します。
例
簡単なものから複雑なものまでの一連の例を通して、Series.mean()の使い方を徹底的に習得しましょう。
例1:基本用法 - 学生の成績の平均点を計算する
最も基本的な使用方法は、数値型の Series を作成し、その後mean()を呼び出して平均値を計算することです。
例
import pandas as pd
# 学生の成績を含む Series を作成する
# 1クラス8人の学生の試験成績をシミュレーションする
scores = pd.Series([85, 92, 78, 90, 88, 76, 95, 82])
# 计算平均成绩
average_score = scores.mean()
print("学生考试成绩:")
print(scores)
print()
print(f"平均成绩:{average_score:.2f} 分")
# 学生の成績を含む Series を作成する
# 1クラス8人の学生の試験成績をシミュレーションする
scores = pd.Series([85, 92, 78, 90, 88, 76, 95, 82])
# 计算平均成绩
average_score = scores.mean()
print("学生考试成绩:")
print(scores)
print()
print(f"平均成绩:{average_score:.2f} 分")
実行結果:
学生考试成绩: 0 85 1 92 2 78 3 90 4 88 5 76 6 95 7 82 dtype: int64 平均成绩:85.75 分
コードの解説:
- 8名の学生の成績を含む Series を作成しました。
mean()すべての成績の合計(685)を学生数(8)で割り、平均値 85.75 を求めます。- 注意:入力が整数であっても、戻り値は浮動小数点数(float)です。
例2:欠損値を含むデータの処理
実際のデータには欠損値がよく含まれます。skipnaパラメータがこれらの欠損値の処理方法を決定します。
例
import pandas as pd
import numpy as np
# 欠損値を含む Series を作成する
# 模拟某学生因病缺席部分考试
scores_with_nan = pd.Series([85, 92, np.nan, 90, 88, np.nan, 95, 82])
print("未受験の成績を含むデータ:")
print(scores_with_nan)
print()
# 默认 skipna=True,跳过 NaN 计算平均值
average_skipna = scores_with_nan.mean()
print(fskipna=True(デフォルト)のときの平均成績:{average_skipna:.2f})
# 设置 skipna=False,遇到 NaN 返回 NaN
average_no_skipna = scores_with_nan.mean(skipna=False)
print(fskipna=False のときの平均成績:{average_no_skipna})
import numpy as np
# 欠損値を含む Series を作成する
# 模拟某学生因病缺席部分考试
scores_with_nan = pd.Series([85, 92, np.nan, 90, 88, np.nan, 95, 82])
print("未受験の成績を含むデータ:")
print(scores_with_nan)
print()
# 默认 skipna=True,跳过 NaN 计算平均值
average_skipna = scores_with_nan.mean()
print(fskipna=True(デフォルト)のときの平均成績:{average_skipna:.2f})
# 设置 skipna=False,遇到 NaN 返回 NaN
average_no_skipna = scores_with_nan.mean(skipna=False)
print(fskipna=False のときの平均成績:{average_no_skipna})
実行結果:
包含缺考成绩的数据: 0 85.0 1 92.0 2 NaN 3 90.0 4 88.0 5 NaN 6 95.0 7 82.0 dtype: float64 skipna=True(默认)时的平均成绩:88.67 skipna=False 时的平均成绩:nan
コードの解説:
- 当
skipna=True(デフォルト値)の場合、有効な値のみの平均値を計算します。 - 計算過程:(85 + 92 + 90 + 88 + 95 + 82)/ 6 = 532 / 6 = 88.67
- 当
skipna=Falseの場合、NaN が1つでも存在すると、結果は NaN を返します。
例3:マルチインデックス Series の使用
階層インデックス(MultiIndex)の Series では、どの階層の平均値を計算するかを指定できます。
例
import pandas as pd
# マルチインデックスの Series を作成する
# 2つのクラスの学生の成績をシミュレートする
multi_index_scores = pd.Series(
[85, 92, 78, 90, 88, 76, 95, 82],
index=pd.MultiIndex.from_tuples([
('A班', '学生1'), ('A班', '学生2'), ('A班', '学生3'), ('A班', '学生4'),
('B班', '学生1'), ('B班', '学生2'), ('B班', '学生3'), ('B班', '学生4')
],
names=['班级', '学生']
)
)
print("2つのクラスの学生の成績:")
print(multi_index_scores)
print()
# すべての学生の平均成績を計算する
overall_mean = multi_index_scores.mean()
print(f"所有学生平均成绩:{overall_mean:.2f}")
print()
# 按班级计算平均成绩(使用 level 参数)
class_a_mean = multi_index_scores.xs('A班', level='班级').mean()
class_b_mean = multi_index_scores.xs('B班', level='班级').mean()
print(f"A班学生平均成绩:{class_a_mean:.2f}")
print(f"B班学生平均成绩:{class_b_mean:.2f}")
# マルチインデックスの Series を作成する
# 2つのクラスの学生の成績をシミュレートする
multi_index_scores = pd.Series(
[85, 92, 78, 90, 88, 76, 95, 82],
index=pd.MultiIndex.from_tuples([
('A班', '学生1'), ('A班', '学生2'), ('A班', '学生3'), ('A班', '学生4'),
('B班', '学生1'), ('B班', '学生2'), ('B班', '学生3'), ('B班', '学生4')
],
names=['班级', '学生']
)
)
print("2つのクラスの学生の成績:")
print(multi_index_scores)
print()
# すべての学生の平均成績を計算する
overall_mean = multi_index_scores.mean()
print(f"所有学生平均成绩:{overall_mean:.2f}")
print()
# 按班级计算平均成绩(使用 level 参数)
class_a_mean = multi_index_scores.xs('A班', level='班级').mean()
class_b_mean = multi_index_scores.xs('B班', level='班级').mean()
print(f"A班学生平均成绩:{class_a_mean:.2f}")
print(f"B班学生平均成绩:{class_b_mean:.2f}")
実行結果:
两个班级的学生成绩:
班级 学生
A班 学生1 85
学生2 92
学生3 78
学生4 90
B班 学生1 88
学生2 76
学生3 95
学生4 82
dtype: int64
所有学生平均成绩:85.75
A班学生平均成绩:86.25
B班学生平均成绩:85.25
コードの解説:
- 2つの階層を持つインデックスを持つ Series を作成しました。インデックス名はそれぞれ「班级」と「学生」です。
- 直接呼び出すと、
mean()すべての要素の平均値が計算されます。 - を使用すると、
xs()特定の階層でデータを絞り込んでから平均値を計算できます。
例4:実際のデータ分析における応用
実際のビジネスシーンに基づいて、mean()の典型的な応用例を示します。
例
import pandas as pd
import numpy as np
# 株式の日次終値データを模擬作成する
stock_prices = pd.Series([
100.5, 102.3, 98.7, 101.2, 103.5,
105.2, 103.8, 107.1, 108.3, 106.9
], index=['周一', '周二', '周三', '周四', '周五',
'周一', '周二', '周三', '周四', '周五'])
# 2周期分のデータを作成
week1 = stock_prices[:5]
week2 = stock_prices[5:]
print("第一周股票价格:")
print(week1)
print(f"第一周平均价格:{week1.mean():.2f}")
print()
print("第二周股票价格:")
print(week2)
print(f"第二周平均价格:{week2.mean():.2f}")
print()
# 2週間の平均価格差を計算する
price_diff = week2.mean() - week1.mean()
print(f"两周平均价格差异:{price_diff:.2f}")
import numpy as np
# 株式の日次終値データを模擬作成する
stock_prices = pd.Series([
100.5, 102.3, 98.7, 101.2, 103.5,
105.2, 103.8, 107.1, 108.3, 106.9
], index=['周一', '周二', '周三', '周四', '周五',
'周一', '周二', '周三', '周四', '周五'])
# 2周期分のデータを作成
week1 = stock_prices[:5]
week2 = stock_prices[5:]
print("第一周股票价格:")
print(week1)
print(f"第一周平均价格:{week1.mean():.2f}")
print()
print("第二周股票价格:")
print(week2)
print(f"第二周平均价格:{week2.mean():.2f}")
print()
# 2週間の平均価格差を計算する
price_diff = week2.mean() - week1.mean()
print(f"两周平均价格差异:{price_diff:.2f}")
実行結果:
第一周股票价格: 周一 100.5 周二 102.3 周三 98.7 周四 101.2 周五 103.5 dtype: float64 第一周平均价格:101.24 第二周股票价格: 周一 105.2 周二 103.8 周三 107.1 周四 108.3 周五 106.9 dtype: float64 第二周平均价格:106.26 两周平均价格差异:5.02
注意事項
mean()入力データがすべて整数であっても、戻り値は常に浮動小数点数(float)です。- 平均値は極端な値(外れ値)に敏感であり、極端な値は計算結果に大きな影響を与えます。
- データに欠損値が多数存在する場合、
skipna=Trueを使用する際は、平均値が一部のデータに基づいて計算されていることを認識する必要があります。 - 非数値データを含む Series の場合、事前にデータクリーニングを行うか、
numeric_only=Trueパラメータを使用する必要があります。
まとめ
Series.mean()は Pandas で最もよく使われる統計関数の一つです。主な特徴は次のとおりです。
- シンプルで使いやすく、ドット演算子で直接呼び出せます。
- 欠損値の処理をサポートし、
skipnaパラメータで制御できます。 - マルチインデックスをサポートしており、階層を選択して計算できます。
- 戻り値は常に浮動小数点数であり、精度が保証されます。
平均値はデータの中心的傾向を表す重要な指標ですが、データに極端な値が存在する場合は、中央値(median())を使用して、データの中心的な位置をより適切に反映することを検討する必要があるかもしれません。
Pandas よく使う関数