pandasのオブジェクト(シリーズ・データフレーム)では、集約や統計量などの各種数学的なメソッドを使うことができる。
このメソッドではデータフレームの行や列に存在するシリーズから、合計や平均値などを求めることができる。

また、NumPyの配列(ndarray)でも同様のメソッドが組み込まれているが、pandasでは欠損値を扱う機能まで用意されている。

ここからは各種メソッドを紹介しながら、欠損値の扱いなどについて見ていこう。

まず、下記のような欠損値を含むサンプル用データフレームを用意する。

import pandas as pd
import numpy as np

df = pd.DataFrame([[1.58, np.nan], [9.54, np.nan], [np.nan, np.nan], [np.nan, 10.30], [-5.91, -6.24]],
                 index=list('abcde'),
                 columns=['one', 'two'])
#     one    two
# a  1.58    NaN
# b  9.54    NaN
# c   NaN    NaN
# d   NaN  10.30
# e -5.91  -6.24

合計値を求めるsumメソッド

以下は列の合計値を求めるsumメソッドを使った例だが、欠損値を除外した合計を求められていることが分かる。

df.sum()
# one    5.21
# two    4.06

引数axisを指定すると、指定した軸による計算がおこなわれる。
axis=1とした場合、行ごとに計算がおこなわれる。

df.sum(axis=1)
# a     1.58
# b     9.54
# c     0.00
# d    10.30
# e   -12.15

平均値を求めるmeanメソッド

平均値を求めるmeanメソッドを見てみよう。

df.mean()
# one    1.736667
# two    2.030000

df.mean(axis=1)
# a     1.580
# b     9.540
# c       NaN
# d    10.300
# e    -6.075

sumメソッドと同様、欠損値を除外し計算がおこなわれていることが分かる。
※行(列)の全ての値が欠損値の場合は計算がおこなわれない。

このようにデフォルトでは欠損値は除外されるが、skipnaオプションにFalseを指定することで、欠損値を計算に含めることもできる。

df.mean(axis=1, skipna=False)
# a      NaN
# b      NaN
# c      NaN
# d      NaN
# e   -6.075

欠損値ではない要素を数えるcountメソッド

countメソッドは、欠損値を除く要素の数(存在する要素の数)を求めることができる。

df.count()
# one    3
# two    2

df.count(axis=1)
# one    3
# two    2

要約統計量を求めるdescribeメソッド

describeメソッドは、標準偏差(std)や最大・最小値(max・min)など、複数の要約統計量を求めることができる。

df.describe()
#             one        two
# count  3.000000   2.000000
# mean   1.736667   2.030000
# std    7.726191  11.695546
# min   -5.910000  -6.240000
# 25%   -2.165000  -2.105000
# 50%    1.580000   2.030000
# 75%    5.560000   6.165000
# max    9.540000  10.300000

中央値を求めるmedianメソッド

medianメソッドは、中央値を求めることができる。

df.median()
# one    1.58
# two    2.03

分散と標準偏差を求めるvar・stdメソッド

標本分散を求める場合はvarメソッド、標本標準偏差を求める場合はstdメソッドを使う。

df.var()
# one     59.694033
# two    136.785800

df.std()
# one     7.726191
# two    11.695546

その他の関連メソッド

ここからは関連するメソッドとして、一次元のシリーズが持つ値に関する情報を抽出する機能を紹介する。

一意な値のみ抽出するuniqueメソッド

uniqueメソッドは、シリーズから一意な値のみを取り出し配列として返す。

series = pd.Series(['c', 'b', 'c', 'c', 'd', 'b', 'a', 'a', 'b', 'e'])

series.unique()
# array(['c', 'b', 'd', 'a', 'e'], dtype=object)

この時取り出した値はソートされていないが、後からsortメソッドでソートをおこなうこともできる。

sr = series.unique()
sr.sort()
# array(['a', 'b', 'c', 'd', 'e'], dtype=object)

値が含まれる頻度を求めるvalue_countsメソッド

value_countsメソッドは、シリーズに含まれる値の頻度を求めることができる。

この時結果として返る配列は、頻度順(降順)によってソートされた配列が返る。

series = pd.Series(['c', 'b', 'c', 'c', 'd', 'b', 'a', 'a', 'b', 'e'])

series.value_counts()
# b    3
# c    3
# a    2
# d    1
# e    1

値が含まれるかを確認するisinメソッド

isinメソッドは引数に指定した値が含まれているかを確認する。
結果は真偽値配列として返される。

series = pd.Series(['c', 'b', 'c', 'c', 'd', 'b', 'a', 'a', 'b', 'e'])
# 0    c
# 1    b
# 2    c
# 3    c
# 4    d
# 5    b
# 6    a
# 7    a
# 8    b
# 9    e

series.isin(['a', 'b'])
# 0    False
# 1     True
# 2    False
# 3    False
# 4    False
# 5     True
# 6     True
# 7     True
# 8     True
# 9    False