Open In Colab

データの演算・記述統計#

pandasには数値データを高速にかつ効率よく演算・集計する機能が備わっています。本節では Series および DataFrame に対して算術演算や記述統計を行う方法について学びます。

本節では数値データを乱数で生成します。乱数はNumPyの random.randn 関数を実行して、4行4列からなる標準正規分布に従う乱数を生成します。 numpy モジュールは一般的に np という別名でインポートされます。

import numpy as np
import pandas as pd

rng = np.random.default_rng(2)
ser = pd.Series(rng.normal(size=4))
df = pd.DataFrame(rng.normal(size=(4, 4)), columns=list("abcd"))
ser
0    0.189053
1   -0.522748
2   -0.413064
3   -2.441467
dtype: float64
df
a b c d
0 1.799707 1.144166 -0.325423 0.773807
1 0.281211 -0.553823 0.977567 -0.310557
2 -0.328824 -0.792147 0.454958 -0.099198
3 0.545289 -0.607186 0.126828 -0.892274

演算子による演算#

Series および DataFrame に対して演算子による演算を行うと、すべての要素に対して演算されます。

ser + 10
0    10.189053
1     9.477252
2     9.586936
3     7.558533
dtype: float64
df ** 2
a b c d
0 3.238947 1.309116 0.105900 0.598777
1 0.079079 0.306720 0.955638 0.096445
2 0.108125 0.627496 0.206987 0.009840
3 0.297340 0.368674 0.016085 0.796153

SeriesDataFrame 同士の演算ができます。この場合、演算対象の要素数が合致している必要があります。

ser + ser * 2
0    0.567160
1   -1.568245
2   -1.239191
3   -7.324402
dtype: float64
df / df
a b c d
0 1.0 1.0 1.0 1.0
1 1.0 1.0 1.0 1.0
2 1.0 1.0 1.0 1.0
3 1.0 1.0 1.0 1.0

関数・メソッドによる演算#

Series および DataFrame には関数が適用できます。

次のコードは各要素に関数を適用しています。

abs(ser)
0    0.189053
1    0.522748
2    0.413064
3    2.441467
dtype: float64

Series および DataFrame には記述統計のためのメソッドが用意されています。

Function Description
count Number of non-NA observations
sum Sum of values
mean Mean of values
mad Mean absolute deviation
median Arithmetic median of values
min Minimum
max Maximum
mode Mode
abs Absolute Value
prod Product of values
std Bessel-corrected sample standard deviation
var Unbiased variance
sem Standard error of the mean
skew Sample skewness (3rd moment)
kurt Sample kurtosis (4th moment)
quantile Sample quantile (value at %)
cumsum Cumulative sum
cumprod Cumulative product
cummax Cumulative maximum
cummin Cumulative minimum

https://pandas.pydata.org/pandas-docs/stable/user_guide/basics.html#descriptive-statistics

round(df)
a b c d
0 2.0 1.0 -0.0 1.0
1 0.0 -1.0 1.0 -0.0
2 -0.0 -1.0 0.0 -0.0
3 1.0 -1.0 0.0 -1.0
# 合計値
ser.sum()
-3.1882259857189634
df.sum()
a    2.297383
b   -0.808989
c    1.233931
d   -0.528222
dtype: float64
# 算術平均
ser.mean()
-0.7970564964297409
df.mean()
a    0.574346
b   -0.202247
c    0.308483
d   -0.132056
dtype: float64

DataFrame に対して集計を行うメソッドは、デフォルトで列に対して演算を行います。行に対して演算を行うにはメソッドの引数 axis1 を渡します。

df.mean(axis=1)
0    0.848064
1    0.098600
2   -0.191303
3   -0.206836
dtype: float64

describe メソッドを実行すると、基本統計量を算出できます。パーセント表示はパーセンタイル値です。

df.describe()
a b c d
count 4.000000 4.000000 4.000000 4.000000
mean 0.574346 -0.202247 0.308483 -0.132056
std 0.895172 0.903399 0.548927 0.690763
min -0.328824 -0.792147 -0.325423 -0.892274
25% 0.128702 -0.653426 0.013765 -0.455986
50% 0.413250 -0.580504 0.290893 -0.204877
75% 0.858893 -0.129326 0.585610 0.119053
max 1.799707 1.144166 0.977567 0.773807

apply メソッドを実行すると、引数に渡した任意の関数を適用できます。

ser.apply(abs)
0    0.189053
1    0.522748
2    0.413064
3    2.441467
dtype: float64
df.apply(sum)
a    2.297383
b   -0.808989
c    1.233931
d   -0.528222
dtype: float64

apply メソッドは、デフォルトで列に対して演算を行います。行に対して演算を行うにはメソッドの引数 axis に 1 を渡します。

df.apply(sum, axis=1)
0    3.392257
1    0.394399
2   -0.765211
3   -0.827343
dtype: float64

次のように、関数を定義して適用できます。

def max_sub_min(x):
    return x.max() - x.min()
df.apply(max_sub_min)
a    2.128531
b    1.936313
c    1.302990
d    1.666081
dtype: float64

無名関数を利用することで、関数の定義を省略できます。

https://docs.python.org/ja/3/reference/expressions.html#lambda

df.apply(lambda x: x.max() - x.min())
a    2.128531
b    1.936313
c    1.302990
d    1.666081
dtype: float64

練習問題1#

ser オブジェクトの中央値を算出してください。

ser
0    0.189053
1   -0.522748
2   -0.413064
3   -2.441467
dtype: float64
# 解答セル

練習問題2#

df オブジェクトの列ごとの中央値を算出してください。

df
a b c d
0 1.799707 1.144166 -0.325423 0.773807
1 0.281211 -0.553823 0.977567 -0.310557
2 -0.328824 -0.792147 0.454958 -0.099198
3 0.545289 -0.607186 0.126828 -0.892274
# 解答セル

練習問題3#

df オブジェクトの行ごとの中央値を算出してください。

# 解答セル

練習問題4#

ser オブジェクトの各要素に次の関数を適用してください。

(1)#\[\begin{align} x^2 + 3x + 4 \end{align}\]
# 解答セル

練習問題5#

df オブジェクトの各要素に次の関数を適用してください。

(2)#\[\begin{align} x^2 + 3x + 4 \end{align}\]
# 解答セル