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