AI資格ドリル
資格を選ぶ

用語比較

np.stdとpandasのstdの違い|ddofの既定値は0と1(Python3データ分析)

np.std は N で割る標準偏差(ddof=0)を返し、pandas の std は分母を N-1 にした値(ddof=1)を返します。割る数の既定値が違うと覚えると、同じデータで値が合わない理由がわかります。

計算の割る数は N - ddof で、ddof の既定値が np.std は 0、pandas の Series.std は 1 です。

この記事の根拠と出典

各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。

np.stdとpandas の stdの要点

np.std

配列の標準偏差を返す。ddof の既定値は 0 で、割る数は N。N-1 で割りたいときは ddof=1 を渡す。

pandas の std

Series.std と DataFrame.std は、標本標準偏差を返す。ddof の既定値は 1 で、割る数は N-1。NA(欠損値)は既定で除外される。

違いを表で確認

比較軸np.stdpandas の std
ddof の既定値np.std は ddof=0。割る数は Npandas の std は ddof=1。割る数は N-1
計算式割る数は N - ddof。既定では N割る数は N - ddof。既定では N-1
欠損値(NA)の扱いnp.std の引数に skipna は無いskipna=True が既定で、NA を除外して計算する
同じ結果にする方法ddof=1 を渡すと、pandas の既定と同じ N-1 で割るpandas公式は、numpy.std と同じ動きにするには ddof=0 と skipna=False を指定すると書いている

Python3エンジニア認定データ分析試験の学習に使う書籍(Amazon)

PR

ほかの資格を含む参考書・問題集の一覧を見る

どこで迷っているかを切り分ける

01

手計算や教科書の値と合わない人

標本標準偏差(N-1 で割る)を求めたいなら、np.std には ddof=1 を渡します。pandas の std は、何も渡さなくても N-1 で割ります。

02

母集団全体の標準偏差を求めたい人

N で割る値がほしいので、np.std は既定のままで使えます。pandas の std では ddof=0 を渡します。

03

NumPyとpandasの結果を突き合わせたい人

pandas公式の Notes にある通り、numpy.std と同じ動きにするには ddof=0 と skipna=False を指定します。どちらも既定値と違う点に注意してください。

具体例で使い分ける

例 1

pandas の std の既定値と ddof=0

pandas公式の例の s = pd.Series([1, 2, 3]) を見ます。

  • 平均は 2 で、平均からの差の2乗は 1、0、1 です。2乗の合計は 2 になります。
  • s.std() は N-1 = 2 で割るので、2 ÷ 2 = 1 の平方根で 1.0 です。
  • s.std(ddof=0) は N = 3 で割るので、2 ÷ 3 の平方根で 0.816496580927726 です。

結論: 同じ3つの値でも、割る数が2か3かで 1.0 と 0.8165 に分かれます。

例 2

np.std の軸を指定した結果

NumPy公式の例の a = np.array([[1, 2], [3, 4]]) を見ます。

  • np.std(a) は4つの値全体の標準偏差で、公式の例では 1.1180339887498949 です。
  • np.std(a, axis=0) は列ごとに計算し、array([1., 1.]) になります。
  • np.std(a, axis=1) は行ごとに計算し、array([0.5, 0.5]) になります。

結論: axis を省くと全体で、axis を指定するとその軸に沿って計算します。割る数は、どちらも既定で N です。

例 3

NumPy で N-1 の値を出す

上の pandas の例と同じ [1, 2, 3] を、NumPy で計算する場合を考えます。

  • np.std は ddof の既定値が 0 なので、np.std([1, 2, 3]) は N = 3 で割った値になります。
  • NumPy公式は、N-1 で割る標準偏差を求めたいときは ddof=1 を使うと説明しています。
  • np.std([1, 2, 3], ddof=1) は、pandas の s.std() と同じ 1.0 になります。

結論: NumPy でも ddof=1 を渡せば、pandas の既定と同じ N-1 で割る値になります。

問題文から答えを選ぶ手順

  1. 1

    何を求めたいかを決める

    手元のデータが全体そのものなら N で割る値、標本なら N-1 で割る値を使います。

  2. 2

    使うライブラリの既定値を確かめる

    np.std は ddof=0、pandas の std は ddof=1 が既定です。

  3. 3

    必要なら ddof を明示する

    どちらで計算しても同じ値にしたいときは、ddof を自分で書きます。

試験での見分け方

  • 1np.std の既定は ddof=0 で、N で割る。
  • 2pandas の std の既定は ddof=1 で、N-1 で割る。
  • 3N-1 で割る値を np.std で求めるには ddof=1 を渡す。
  • 4pandas の std で N で割るには ddof=0 を渡す。

誤答しやすい選択肢

NumPyもpandasも同じ既定値だと考える

修正: np.std は ddof=0、pandas の std は ddof=1 です。同じデータでも、何も渡さないと結果が変わります。

ddof は「自由度」そのものだと考える

修正: ddof は Delta Degrees of Freedom(自由度の差)で、割る数を N - ddof にするための値です。

ddof=0 だけで pandas を numpy.std と一致させられると考える

修正: pandas公式は、numpy.std と同じ動きにするには ddof=0 に加えて skipna=False も指定すると書いています。

確認問題

Q1np.std の ddof の既定値は?

答え: 0

NumPy公式のリファレンスに By default ddof is zero. と書かれています。割る数は N です。

Q2pd.Series([1, 2, 3]).std() の結果は?

答え: 1.0

pandas の std は既定で N-1 = 2 で割ります。平均からの差の2乗の合計は 2 なので、2 ÷ 2 = 1 の平方根で 1.0 です。

Q3pd.Series([1, 2, 3]).std(ddof=0) の結果は?

答え: 0.816496580927726

N = 3 で割るので、2 ÷ 3 の平方根になります。pandas公式の例と同じ値です。

Q4np.std で N-1 で割る標準偏差を求めるには?

答え: ddof=1 を渡す

割る数が N - ddof になるため、ddof=1 で N-1 になります。

到達チェック

  • np.std と pandas の std の ddof の既定値を言える
  • 割る数が N - ddof になることを説明できる
  • [1, 2, 3] の標準偏差が 1.0 と 0.8165 に分かれる理由を言える
  • pandas の結果を numpy.std に合わせる指定を答えられる

同じ資格で次に知りたいこと

よくある質問

Qnp.stdとpandasのstdの違いは?

A

割る数の既定値です。np.std は ddof=0 で N、pandas の std は ddof=1 で N-1 で割ります。

Qnp.std で標本標準偏差を求めるには?

A

ddof=1 を渡します。NumPy公式は、N-1 で割る値を求めるには ddof=1 を使うと書いています。

Qpandasの結果をnumpy.stdと合わせるには?

A

pandas公式のNotesでは、ddof=0 と skipna=False を指定します。

Qデータ分析試験の範囲?

A

本サイトの第3章 NumPy と第4章 pandas で扱います。出題の形式や範囲は、受験前に公式の案内で確認してください。

次に見る比較

執筆: AI資格ドリル編集部(運営者情報を見る)