[pandas] 集約メソッド

[pandas] 集約メソッド

集約メソッド

 pandas の Series や DataFrame には列について合計や平均、標準偏差などを求める 集約メソッド が用意されています。以下のコードで太陽系の惑星一覧表を取得して DataFrame を作成します (planets.csv は Wikipedia から得たデータを元に作成しました)。

# リストPD35-1

import numpy as np
import pandas as pd

# ファイルのパス
u = "https://python.atelierkobato.com/wp-content/uploads/2019/07/planets.csv"

# CSVファイルを読み込んでデータフレームに変換
# 最初の行を列ラベル、左の列を行ラベルに設定
planets = pd.read_csv(u, encoding="SHIFT-JIS",
                      header=0, index_col="惑星")

print(planets)

 リストPD35-1 が出力する表はこのサイトのページ幅に収まらないので、実行結果の掲載は割愛します。drop()メソッドを使って、いくつかの項目を削除しておきます。

# リストPD35-2

# 削除する項目のリスト
drop_list = ["軌道傾斜角", "軌道離心率",
             "表面重力", "自転周期", "衛星数"]

# リストにある項目をすべて削除
planets = planets.drop(drop_list, axis=1)

print(planets)
         半径    質量  軌道長半径  公転周期
惑星
水星     2440    0.06    0.387       0.241
金星     6052    0.82    0.723       0.615
地球     6378    1.00    1.000       1.000
火星     3396    0.11    1.524       1.881
木星    71492  318.26    5.204      11.862
土星    60268   95.14    9.582      29.457
天王星  25559   14.54   19.201      84.011
海王星  24764   17.09   30.047     164.790

 これで準備が整いました。いくつかの集約メソッドを試してみましょう。
 たとえば、mean()メソッドは列ごとに平均値を計算します。

# リストPD35-3

# 列ごとに平均値を計算
p_mean = planets.mean()

print(p_mean)
半径       25043.625000
質量          55.877500
軌道長半径     8.458500
公転周期      36.732125
dtype: float64

 min()メソッドは列ごとに最小値を抽出します。

# リストPD35-4

# 列ごとに最小値を抽出
p_min = planets.min()

print(p_min)
半径        2440
質量        0.06
軌道長半径  0.387
公転周期    0.241
dtype: object

 cumsum()メソッドは列ごとに累積和を計算します。これによって、内惑星 (水星、金星、地球、火星) の質量の和などを知ることができます。

# リストPD35-5

# 列ごとに累積和を計算
p_cs = planets.cumsum()

print(p_cs)
          半径      質量  軌道長半径  公転周期
惑星                                    
水星      2440.0    0.06   0.387       0.241
金星      8492.0    0.88   1.110       0.856
地球     14870.0    1.88   2.110       1.856
火星     18266.0    1.99   3.634       3.737
木星     89758.0  320.25   8.838      15.599
土星    150026.0  415.39  18.420      45.056
天王星  175585.0  429.93  37.621     129.067
海王星  200349.0  447.02  67.668     293.857

 idxmax()メソッドは列ごとに最大値のインデクス (行ラベル) を取得します。
 これを使って、最大質量をもつ惑星や公転周期が最も長い惑星などを検索できます。

# リストPD35-6

# 最大値の行ラベルを参照
p_imax = planets.idxmax()

print(p_imax)
半径        木星
質量        木星
軌道長半径  海王星
公転周期    海王星
dtype: object

 下の表に代表的な集約メソッドをまとめておきます。

集約メソッド 説明
sum() 総和
cumsum() 累積和
min() 最小値
max() 最大値
idxmin() 最小値のラベル
idxmax() 最大値のラベル
mean() 平均値
median() 中央値
std() 標準偏差
var() 分散
mad() 平均絶対偏差
diff() 差分

DataFrame.describe()

 describe()メソッド を使うと、列ごとにデータ数 (count), 平均値 (mean), 標準偏差 (std), 最小値 (min), 最大値 (max) などの統計データをまとめて取得できます。

# リストPD35-7

# すべての項目について要約統計量を取得
p_dsb = planets.describe()

print(p_dsb)
         半径        質量        軌道長半径   公転周期
count      8.000000    8.000000   8.000000    8.000000
mean   25043.625000   55.877500   8.458500   36.732125
std    26958.123196  110.755751  10.836593   59.079845
min     2440.000000    0.060000   0.387000    0.241000
25%     5388.000000    0.642500   0.930750    0.903750
50%    15571.000000    7.770000   3.364000    6.871500
75%    34236.250000   36.602500  11.986750   43.095500
max    71492.000000  318.260000  30.047000  164.790000

 50% は中央値 (median), 25% と 75% はそれぞれ 1/4分位数、3/4分位数です。