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
Contents
合計値を求める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