pandas の describe() は、DataFrameやSeriesの要約統計量をまとめて確認するメソッドです。
数値列に対して df.describe() を実行すると、count、mean、std、min、25%、50%、75%、max が一覧で表示されます。
つまり、describe() は、データの件数・平均・ばらつき・最小値・最大値・中央値などを一度に確認したいときに使います。
CSVやExcelファイルを読み込んだあと、いきなりグラフ化や機械学習に進むのではなく、まず describe() で数値列の特徴を確認しておくと、外れ値・極端な値・欠損値の影響に気づきやすくなります。
この記事では、describe() の基本的な使い方、出力される統計量の意味、include='all'、include / exclude、info() との違いまで、初心者向けに出力例つきで解説します。
この記事でわかること
この記事では、次の内容を扱います。
df.describe()の基本的な使い方count、mean、std、min、25%、50%、75%、maxの意味- 数値列と文字列列で
describe()の出力がどう変わるか include='all'で全列を確認する方法- 日付列で
describe()を使った場合の見方 include/excludeで対象列を指定する方法percentilesで表示する分位点を変更する方法Series.describe()とDataFrame.describe()の違いdescribe()とinfo()の使い分けdescribe()とmean()、std()、quantile()の関係
- pandas describe()とは?要約統計量をまとめて確認するメソッド
- サンプルデータを用意する
- df.describe()の基本的な使い方
- describe()で出力される項目の意味
- 数値列と文字列列でdescribe()の出力はどう変わるか
- 日付列をdescribe()で確認する場合
- describe()の便利な引数
- Series.describe()とDataFrame.describe()の違い
- describe()とinfo()の違い
- describe()とmean()・std()・quantile()の違い
- describe()で外れ値や極端な値に気づく例
- 欠損値がある場合のdescribe()の見方
- よくあるミス
- 実務でのおすすめ確認手順
- まとめ
- 公式ドキュメント
- 次に読みたい関連記事
pandas describe()とは?要約統計量をまとめて確認するメソッド
describe() は、DataFrameやSeriesの概要を数値で確認するためのメソッドです。
特に数値列に対して使うと、平均値、標準偏差、最小値、最大値、中央値などをまとめて確認できます。
たとえば、売上データを読み込んだあとに、
- 売上の平均はいくらか
- 最小値や最大値に極端な値がないか
- 中央値と平均値に大きな差がないか
- データ件数が列ごとにそろっているか
を確認したいときに便利です。
最初に覚えるなら、次のように考えるとわかりやすいです。
| メソッド | 役割 |
|---|---|
df.describe() |
数値列の統計量をまとめて確認する |
df.describe(include='all') |
数値列・文字列列を含めて確認する |
df.info() |
列名・データ型・欠損値・メモリ使用量を確認する |
サンプルデータを用意する
ここでは、売上データを例にします。
商品、カテゴリ、店舗 のような文字列列と、単価、数量、売上、満足度 のような数値列を含むDataFrameを使います。
実際の分析ではCSVやExcelから読み込むことが多いですが、ここでは説明をわかりやすくするために、コード上でDataFrameを作成します。
import pandas as pd
df = pd.DataFrame({
"日付": pd.to_datetime([
"2026-01-05", "2026-01-08", "2026-01-12", "2026-01-15",
"2026-01-20", "2026-01-24", "2026-01-28", "2026-01-31"
]),
"商品": ["ノートPC", "マウス", "キーボード", "モニター", "USBメモリ", "ノートPC", "マウス", "モニター"],
"カテゴリ": ["PC", "周辺機器", "周辺機器", "周辺機器", "記録媒体", "PC", "周辺機器", "周辺機器"],
"店舗": ["東京", "東京", "大阪", "大阪", "名古屋", "東京", "名古屋", "大阪"],
"単価": [120000, 3000, 8000, 32000, 2500, 115000, 2800, 35000],
"数量": [1, 5, 3, 2, 10, 1, 4, 2],
"売上": [120000, 15000, 24000, 64000, 25000, 115000, 11200, 70000],
"満足度": [4.8, 4.2, 4.0, 4.5, 3.8, 4.7, 4.1, 4.4]
})
df
| 日付 | 商品 | カテゴリ | 店舗 | 単価 | 数量 | 売上 | 満足度 | |
|---|---|---|---|---|---|---|---|---|
| 0 | 2026-01-05 00:00:00 | ノートPC | PC | 東京 | 120000 | 1 | 120000 | 4.8 |
| 1 | 2026-01-08 00:00:00 | マウス | 周辺機器 | 東京 | 3000 | 5 | 15000 | 4.2 |
| 2 | 2026-01-12 00:00:00 | キーボード | 周辺機器 | 大阪 | 8000 | 3 | 24000 | 4 |
| 3 | 2026-01-15 00:00:00 | モニター | 周辺機器 | 大阪 | 32000 | 2 | 64000 | 4.5 |
| 4 | 2026-01-20 00:00:00 | USBメモリ | 記録媒体 | 名古屋 | 2500 | 10 | 25000 | 3.8 |
| 5 | 2026-01-24 00:00:00 | ノートPC | PC | 東京 | 115000 | 1 | 115000 | 4.7 |
| 6 | 2026-01-28 00:00:00 | マウス | 周辺機器 | 名古屋 | 2800 | 4 | 11200 | 4.1 |
| 7 | 2026-01-31 00:00:00 | モニター | 周辺機器 | 大阪 | 35000 | 2 | 70000 | 4.4 |
このDataFrameには、日付列、文字列列、数値列が混在しています。
describe() は、標準では数値列を中心に統計量を表示します。必要に応じて include や exclude を使うと、文字列列や日付列も確認できます。
df.describe()の基本的な使い方
describe() の基本形は次のとおりです。
df.describe()
まずは、そのまま実行してみます。
df.describe()
| 日付 | 単価 | 数量 | 売上 | 満足度 | |
|---|---|---|---|---|---|
| count | 8 | 8 | 8 | 8 | 8 |
| mean | 2026-01-17 21:00:00 | 39787.5 | 3.5 | 55525 | 4.3125 |
| min | 2026-01-05 00:00:00 | 2500 | 1 | 11200 | 3.8 |
| 25% | 2026-01-11 00:00:00 | 2950 | 1.75 | 21750 | 4.075 |
| 50% | 2026-01-17 12:00:00 | 20000 | 2.5 | 44500 | 4.3 |
| 75% | 2026-01-25 00:00:00 | 55000 | 4.25 | 81250 | 4.55 |
| max | 2026-01-31 00:00:00 | 120000 | 10 | 120000 | 4.8 |
| std | NaN | 49708.8 | 2.9761 | 43928.9 | 0.34821 |
df.describe() を実行すると、標準では数値列だけが対象になります。
今回の例では、単価、数量、売上、満足度 について、件数、平均、標準偏差、最小値、四分位数、最大値が表示されます。
ここで特に大事なのは、出力された数字をそのまま眺めるだけでなく、各項目の意味を理解することです。
describe()で出力される項目の意味
describe() の出力で最初に押さえたい項目は、次の8つです。
| 項目 | 意味 | 初心者向けの見方 |
|---|---|---|
count |
欠損値を除いた件数 | データが何件あるか |
mean |
平均値 | 値のだいたいの中心 |
std |
標準偏差 | 値のばらつき |
min |
最小値 | 一番小さい値 |
25% |
第1四分位数 | 下から25%の位置 |
50% |
中央値 | 真ん中の値 |
75% |
第3四分位数 | 下から75%の位置 |
max |
最大値 | 一番大きい値 |
それぞれを順番に見ていきます。
count:欠損値を除いた件数
count は、欠損値を除いたデータの件数です。
たとえば、8行のデータがあり、ある列に欠損値がなければ count は8になります。
もし列によって count の値が違う場合は、欠損値が含まれている可能性があります。
df.describe().loc["count"]
| count | |
|---|---|
| 日付 | 8 |
| 単価 | 8 |
| 数量 | 8 |
| 売上 | 8 |
| 満足度 | 8 |
count は、単なる行数ではなく、欠損値を除いた件数です。
欠損値の確認を詳しく行う場合は、info() や isnull().sum() と組み合わせて確認します。
mean:平均値
mean は平均値です。
売上データであれば、売上の平均、単価の平均、満足度の平均などを確認できます。
df.describe().loc["mean"]
| mean | |
|---|---|
| 日付 | 2026-01-17 21:00:00 |
| 単価 | 39787.5 |
| 数量 | 3.5 |
| 売上 | 55525 |
| 満足度 | 4.3125 |
平均値は便利ですが、極端に大きい値や小さい値の影響を受けやすい点に注意が必要です。
たとえば、一部の商品だけ売上が非常に大きい場合、平均値だけを見ると全体像を誤解することがあります。
そのため、平均値だけでなく、50% の中央値や min、max も一緒に確認することが大切です。
std:標準偏差
std は標準偏差です。
標準偏差は、値が平均値の周りにどれくらい散らばっているかを表します。
初心者のうちは、次のように考えるとわかりやすいです。
std の状態 |
見方 |
|---|---|
| 小さい | 値が平均付近に集まっている |
| 大きい | 値のばらつきが大きい |
たとえば、売上の std が大きい場合、商品や店舗によって売上に大きな差がある可能性があります。
df.describe().loc["std"]
| std | |
|---|---|
| 日付 | NaN |
| 単価 | 49708.8 |
| 数量 | 2.9761 |
| 売上 | 43928.9 |
| 満足度 | 0.34821 |
標準偏差は、平均値とセットで見ると理解しやすくなります。
平均値が同じでも、標準偏差が大きければ値のばらつきが大きく、標準偏差が小さければ値が比較的まとまっていると考えられます。
min / max:最小値・最大値
min は最小値、max は最大値です。
外れ値や入力ミスを見つけるときに役立ちます。
df.describe().loc[["min", "max"]]
| 日付 | 単価 | 数量 | 売上 | 満足度 | |
|---|---|---|---|---|---|
| min | 2026-01-05 00:00:00 | 2500 | 1 | 11200 | 3.8 |
| max | 2026-01-31 00:00:00 | 120000 | 10 | 120000 | 4.8 |
たとえば、年齢データで max が300になっていたり、売上データで min がマイナスになっていたりすると、入力ミスや特殊なデータの可能性があります。
min と max は、データの範囲をざっくり確認するために重要です。
25% / 50% / 75%:四分位数・中央値
25%、50%、75% は、データを小さい順に並べたときの位置を表します。
| 項目 | 意味 |
|---|---|
25% |
下から25%の位置の値 |
50% |
下から50%の位置の値。中央値 |
75% |
下から75%の位置の値 |
特に 50% は中央値です。
平均値と中央値を比べると、データの偏りに気づきやすくなります。
df.describe().loc[["25%", "50%", "75%"]]
| 日付 | 単価 | 数量 | 売上 | 満足度 | |
|---|---|---|---|---|---|
| 25% | 2026-01-11 00:00:00 | 2950 | 1.75 | 21750 | 4.075 |
| 50% | 2026-01-17 12:00:00 | 20000 | 2.5 | 44500 | 4.3 |
| 75% | 2026-01-25 00:00:00 | 55000 | 4.25 | 81250 | 4.55 |
たとえば、平均値が中央値よりかなり大きい場合、一部に大きな値が含まれている可能性があります。
売上データでは、一部の高額商品や大口注文が平均値を押し上げることがあります。
数値列と文字列列でdescribe()の出力はどう変わるか
describe() は、対象列のデータ型によって出力される項目が変わります。
数値列では、平均値や標準偏差などが表示されます。
一方、文字列列では、unique、top、freq などが表示されます。
まず、数値列だけを対象にした場合を確認します。
df[["単価", "数量", "売上", "満足度"]].describe()
| 単価 | 数量 | 売上 | 満足度 | |
|---|---|---|---|---|
| count | 8 | 8 | 8 | 8 |
| mean | 39787.5 | 3.5 | 55525 | 4.3125 |
| std | 49708.8 | 2.9761 | 43928.9 | 0.34821 |
| min | 2500 | 1 | 11200 | 3.8 |
| 25% | 2950 | 1.75 | 21750 | 4.075 |
| 50% | 20000 | 2.5 | 44500 | 4.3 |
| 75% | 55000 | 4.25 | 81250 | 4.55 |
| max | 120000 | 10 | 120000 | 4.8 |
次に、文字列列だけを対象にして describe() を実行します。
df[["商品", "カテゴリ", "店舗"]].describe()
| 商品 | カテゴリ | 店舗 | |
|---|---|---|---|
| count | 8 | 8 | 8 |
| unique | 5 | 3 | 3 |
| top | ノートPC | 周辺機器 | 東京 |
| freq | 2 | 5 | 3 |
文字列列では、数値列とは違う項目が表示されます。
| 項目 | 意味 |
|---|---|
count |
欠損値を除いた件数 |
unique |
値の種類数 |
top |
最も多く出現する値 |
freq |
top の出現回数 |
たとえば、カテゴリ の top が「周辺機器」で、freq が多ければ、周辺機器カテゴリの商品が多いことがわかります。
このように、describe() は数値列だけでなく、文字列列の概要確認にも使えます。
日付列をdescribe()で確認する場合
describe() は、日付列に対しても使えます。
日付列を確認すると、最も古い日付、最も新しい日付、件数などを把握できます。
まず、日付 列だけを指定して describe() を実行してみます。
df["日付"].describe()
| 日付 | |
|---|---|
| count | 8 |
| mean | 2026-01-17 21:00:00 |
| min | 2026-01-05 00:00:00 |
| 25% | 2026-01-11 00:00:00 |
| 50% | 2026-01-17 12:00:00 |
| 75% | 2026-01-25 00:00:00 |
| max | 2026-01-31 00:00:00 |
日付列に対する describe() では、データの件数や最小日付、最大日付などを確認できます。
日付データを扱うときは、次のような確認に役立ちます。
| 見たいこと | 確認する項目 |
|---|---|
| 何件の日付データがあるか | count |
| 最も古い日付 | min |
| 最も新しい日付 | max |
売上データやアクセス解析データでは、集計対象の期間が想定どおりかを確認するために使えます。
ただし、日付列の詳しい集計には、dt アクセサや resample() を使うことも多いです。describe() は、日付データの範囲をざっくり確認する入口として使うと考えるとよいです。
describe()の便利な引数
ここでは、describe() でよく使う引数を整理します。
include='all'、include、exclude、percentiles を使えるようになると、確認したい列や分位点を指定しやすくなります。
include=’all’ですべての列を確認する
標準の df.describe() は、基本的に数値列を対象にします。
数値列と文字列列をまとめて確認したい場合は、include='all' を指定します。
df.describe(include="all")
| 日付 | 商品 | カテゴリ | 店舗 | 単価 | 数量 | 売上 | 満足度 | |
|---|---|---|---|---|---|---|---|---|
| count | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 |
| unique | NaN | 5 | 3 | 3 | NaN | NaN | NaN | NaN |
| top | NaN | ノートPC | 周辺機器 | 東京 | NaN | NaN | NaN | NaN |
| freq | NaN | 2 | 5 | 3 | NaN | NaN | NaN | NaN |
| mean | 2026-01-17 21:00:00 | NaN | NaN | NaN | 39787.5 | 3.5 | 55525 | 4.3125 |
| min | 2026-01-05 00:00:00 | NaN | NaN | NaN | 2500 | 1 | 11200 | 3.8 |
| 25% | 2026-01-11 00:00:00 | NaN | NaN | NaN | 2950 | 1.75 | 21750 | 4.075 |
| 50% | 2026-01-17 12:00:00 | NaN | NaN | NaN | 20000 | 2.5 | 44500 | 4.3 |
| 75% | 2026-01-25 00:00:00 | NaN | NaN | NaN | 55000 | 4.25 | 81250 | 4.55 |
| max | 2026-01-31 00:00:00 | NaN | NaN | NaN | 120000 | 10 | 120000 | 4.8 |
| std | NaN | NaN | NaN | NaN | 49708.8 | 2.9761 | 43928.9 | 0.34821 |
include='all' を指定すると、数値列と文字列列の両方が表示されます。
ただし、数値列にしか意味がない項目や、文字列列にしか意味がない項目があるため、該当しない部分は NaN と表示されます。
| 列の種類 | 主に表示される項目 |
|---|---|
| 数値列 | mean、std、min、25%、50%、75%、max |
| 文字列列 | unique、top、freq |
include='all' は、データ全体をざっと確認したいときに便利です。
includeで対象列を指定する
describe() では、include や exclude を使って対象にする列の種類を指定できます。
たとえば、文字列列だけを確認したい場合は、include="object" を使います。
df.describe(include="object")
| 商品 | カテゴリ | 店舗 | |
|---|---|---|---|
| count | 8 | 8 | 8 |
| unique | 5 | 3 | 3 |
| top | ノートPC | 周辺機器 | 東京 |
| freq | 2 | 5 | 3 |
数値列だけを明示的に確認したい場合は、include="number" を使います。
df.describe(include="number")
| 単価 | 数量 | 売上 | 満足度 | |
|---|---|---|---|---|
| count | 8 | 8 | 8 | 8 |
| mean | 39787.5 | 3.5 | 55525 | 4.3125 |
| std | 49708.8 | 2.9761 | 43928.9 | 0.34821 |
| min | 2500 | 1 | 11200 | 3.8 |
| 25% | 2950 | 1.75 | 21750 | 4.075 |
| 50% | 20000 | 2.5 | 44500 | 4.3 |
| 75% | 55000 | 4.25 | 81250 | 4.55 |
| max | 120000 | 10 | 120000 | 4.8 |
逆に、数値列を除外したい場合は、exclude="number" を使います。
df.describe(exclude="number")
| 日付 | 商品 | カテゴリ | 店舗 | |
|---|---|---|---|---|
| count | 8 | 8 | 8 | 8 |
| unique | NaN | 5 | 3 | 3 |
| top | NaN | ノートPC | 周辺機器 | 東京 |
| freq | NaN | 2 | 5 | 3 |
| mean | 2026-01-17 21:00:00 | NaT | NaT | NaT |
| min | 2026-01-05 00:00:00 | NaT | NaT | NaT |
| 25% | 2026-01-11 00:00:00 | NaT | NaT | NaT |
| 50% | 2026-01-17 12:00:00 | NaT | NaT | NaT |
| 75% | 2026-01-25 00:00:00 | NaT | NaT | NaT |
| max | 2026-01-31 00:00:00 | NaT | NaT | NaT |
include と exclude は、列数が多いDataFrameで役立ちます。
たとえば、数十列あるデータで文字列列だけを確認したい場合、手作業で列名を選ぶよりも効率的です。
| やりたいこと | 書き方 |
|---|---|
| 数値列だけ確認 | df.describe(include="number") |
| 文字列列だけ確認 | df.describe(include="object") |
| すべての列を確認 | df.describe(include="all") |
| 数値列を除外 | df.describe(exclude="number") |
percentilesで表示する分位点を変更する
標準の describe() では、25%、50%、75% が表示されます。
この分位点は、percentiles 引数で変更できます。
たとえば、10%、50%、90%の位置を確認したい場合は、次のように書きます。
df.describe(percentiles=[0.1, 0.5, 0.9])
| 日付 | 単価 | 数量 | 売上 | 満足度 | |
|---|---|---|---|---|---|
| count | 8 | 8 | 8 | 8 | 8 |
| mean | 2026-01-17 21:00:00 | 39787.5 | 3.5 | 55525 | 4.3125 |
| min | 2026-01-05 00:00:00 | 2500 | 1 | 11200 | 3.8 |
| 10% | 2026-01-07 02:24:00 | 2710 | 1 | 13860 | 3.94 |
| 50% | 2026-01-17 12:00:00 | 20000 | 2.5 | 44500 | 4.3 |
| 90% | 2026-01-28 21:36:00 | 116500 | 6.5 | 116500 | 4.73 |
| max | 2026-01-31 00:00:00 | 120000 | 10 | 120000 | 4.8 |
| std | NaN | 49708.8 | 2.9761 | 43928.9 | 0.34821 |
percentiles=[0.1, 0.5, 0.9] とすると、10%、50%、90%の位置が表示されます。
外れ値の影響や、上位・下位の分布をもう少し細かく見たいときに使えます。
ただし、初心者のうちは、まず標準の 25%、50%、75% を読めるようになれば十分です。
Series.describe()とDataFrame.describe()の違い
describe() は、DataFrame全体にも、1つの列であるSeriesにも使えます。
DataFrameに使う場合は、列ごとに統計量が表示されます。
df.describe()
| 日付 | 単価 | 数量 | 売上 | 満足度 | |
|---|---|---|---|---|---|
| count | 8 | 8 | 8 | 8 | 8 |
| mean | 2026-01-17 21:00:00 | 39787.5 | 3.5 | 55525 | 4.3125 |
| min | 2026-01-05 00:00:00 | 2500 | 1 | 11200 | 3.8 |
| 25% | 2026-01-11 00:00:00 | 2950 | 1.75 | 21750 | 4.075 |
| 50% | 2026-01-17 12:00:00 | 20000 | 2.5 | 44500 | 4.3 |
| 75% | 2026-01-25 00:00:00 | 55000 | 4.25 | 81250 | 4.55 |
| max | 2026-01-31 00:00:00 | 120000 | 10 | 120000 | 4.8 |
| std | NaN | 49708.8 | 2.9761 | 43928.9 | 0.34821 |
1つの列だけに使う場合は、Seriesに対して describe() を実行します。
df["売上"].describe()
| 売上 | |
|---|---|
| count | 8 |
| mean | 55525 |
| std | 43928.9 |
| min | 11200 |
| 25% | 21750 |
| 50% | 44500 |
| 75% | 81250 |
| max | 120000 |
df["売上"].describe() のように書くと、売上列だけの統計量を確認できます。
特定の列だけ詳しく見たい場合は、Seriesの describe() が便利です。
また、複数列だけ確認したい場合は、次のように列名をリストで指定します。
df[["単価", "売上"]].describe()
| 単価 | 売上 | |
|---|---|---|
| count | 8 | 8 |
| mean | 39787.5 | 55525 |
| std | 49708.8 | 43928.9 |
| min | 2500 | 11200 |
| 25% | 2950 | 21750 |
| 50% | 20000 | 44500 |
| 75% | 55000 | 81250 |
| max | 120000 | 120000 |
ここで、df["売上"] と df[["売上"]] の違いにも注意しましょう。
| 書き方 | 返るもの |
|---|---|
df["売上"] |
Series |
df[["売上"]] |
DataFrame |
初心者のうちは、1列だけなら df["売上"].describe()、複数列なら df[["単価", "売上"]].describe() と覚えるとよいです。
describe()とinfo()の違い
describe() と一緒に使われることが多いのが info() です。
どちらもDataFrameの確認に使いますが、確認できる内容が違います。
| メソッド | 確認できること | 主な使いどころ |
|---|---|---|
info() |
行数、列名、欠損値の有無、データ型、メモリ使用量 | データ構造を確認したいとき |
describe() |
平均、標準偏差、最小値、中央値、最大値など | 数値の分布や統計量を確認したいとき |
実際に info() を実行してみます。
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 8 entries, 0 to 7
Data columns (total 8 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 日付 8 non-null datetime64[ns]
1 商品 8 non-null object
2 カテゴリ 8 non-null object
3 店舗 8 non-null object
4 単価 8 non-null int64
5 数量 8 non-null int64
6 売上 8 non-null int64
7 満足度 8 non-null float64
dtypes: datetime64[ns](1), float64(1), int64(3), object(3)
memory usage: 644.0+ bytes
info() では、列ごとのデータ型や欠損していない件数を確認できます。
一方、describe() では、平均値や標準偏差などの統計量を確認できます。
おすすめの順番は次のとおりです。
df.info()で列名・型・欠損値を確認するdf.describe()で数値列の統計量を確認するdf.describe(include='all')で文字列列も含めて確認する
この流れにすると、データの全体像をつかみやすくなります。
describe()とmean()・std()・quantile()の違い
describe() の出力項目は、個別のメソッドでも確認できます。
| 確認したいこと | 個別メソッド |
|---|---|
| 平均値 | mean() |
| 標準偏差 | std() |
| 最小値 | min() |
| 中央値 | median() |
| 最大値 | max() |
| 分位点 | quantile() |
たとえば、売上の平均値だけを確認したい場合は、mean() を使えます。
df["売上"].mean()
55525.0
売上の標準偏差だけを確認したい場合は、std() を使えます。
df["売上"].std()
43928.89546918812
中央値や四分位数を確認したい場合は、quantile() が使えます。
df["売上"].quantile([0.25, 0.5, 0.75])
| 売上 | |
|---|---|
| 0.25 | 21750 |
| 0.5 | 44500 |
| 0.75 | 81250 |
describe() は、これらの統計量をまとめて確認するためのメソッドです。
| 場面 | おすすめ |
|---|---|
| まず全体像を見たい | describe() |
| 平均だけ知りたい | mean() |
| ばらつきだけ見たい | std() |
| 中央値や四分位数を詳しく見たい | quantile() |
最初は describe() で全体を確認し、気になる列があれば個別メソッドで深掘りするとよいです。
describe()で外れ値や極端な値に気づく例
describe() は、外れ値や極端な値に気づく入口としても役立ちます。
ここでは、売上に極端に大きい値が1つ入ったデータを作って、describe() の見え方を確認します。
df_outlier = df.copy()
df_outlier.loc[7, "売上"] = 700000
df_outlier[["商品", "売上"]]
| 商品 | 売上 | |
|---|---|---|
| 0 | ノートPC | 120000 |
| 1 | マウス | 15000 |
| 2 | キーボード | 24000 |
| 3 | モニター | 64000 |
| 4 | USBメモリ | 25000 |
| 5 | ノートPC | 115000 |
| 6 | マウス | 11200 |
| 7 | モニター | 700000 |
df_outlier["売上"].describe()
| 売上 | |
|---|---|
| count | 8 |
| mean | 134275 |
| std | 232697 |
| min | 11200 |
| 25% | 21750 |
| 50% | 44500 |
| 75% | 116250 |
| max | 700000 |
この例では、max が大きくなり、mean も引き上げられます。
一方で、50% の中央値は、極端な値の影響を平均値ほど大きく受けません。
このように、describe() を見るときは、次の組み合わせで確認すると実務で使いやすくなります。
| 見る項目 | チェックすること |
|---|---|
mean と 50% |
平均値と中央値が大きく離れていないか |
min と max |
極端に小さい値・大きい値がないか |
std |
ばらつきが大きすぎないか |
describe() だけで外れ値を完全に判断することはできませんが、外れ値に気づく最初のチェックとして有効です。
欠損値がある場合のdescribe()の見方
describe() の count は、欠損値を除いた件数です。
ここでは、あえて欠損値を含むDataFrameを作って確認します。
df_nan = df.copy()
df_nan.loc[2, "売上"] = pd.NA
df_nan.loc[5, "満足度"] = pd.NA
df_nan
| 日付 | 商品 | カテゴリ | 店舗 | 単価 | 数量 | 売上 | 満足度 | |
|---|---|---|---|---|---|---|---|---|
| 0 | 2026-01-05 00:00:00 | ノートPC | PC | 東京 | 120000 | 1 | 120000 | 4.8 |
| 1 | 2026-01-08 00:00:00 | マウス | 周辺機器 | 東京 | 3000 | 5 | 15000 | 4.2 |
| 2 | 2026-01-12 00:00:00 | キーボード | 周辺機器 | 大阪 | 8000 | 3 | NaN | 4 |
| 3 | 2026-01-15 00:00:00 | モニター | 周辺機器 | 大阪 | 32000 | 2 | 64000 | 4.5 |
| 4 | 2026-01-20 00:00:00 | USBメモリ | 記録媒体 | 名古屋 | 2500 | 10 | 25000 | 3.8 |
| 5 | 2026-01-24 00:00:00 | ノートPC | PC | 東京 | 115000 | 1 | 115000 | NaN |
| 6 | 2026-01-28 00:00:00 | マウス | 周辺機器 | 名古屋 | 2800 | 4 | 11200 | 4.1 |
| 7 | 2026-01-31 00:00:00 | モニター | 周辺機器 | 大阪 | 35000 | 2 | 70000 | 4.4 |
df_nan.describe()
| 日付 | 単価 | 数量 | 売上 | 満足度 | |
|---|---|---|---|---|---|
| count | 8 | 8 | 8 | 7 | 7 |
| mean | 2026-01-17 21:00:00 | 39787.5 | 3.5 | 60028.6 | 4.25714 |
| min | 2026-01-05 00:00:00 | 2500 | 1 | 11200 | 3.8 |
| 25% | 2026-01-11 00:00:00 | 2950 | 1.75 | 20000 | 4.05 |
| 50% | 2026-01-17 12:00:00 | 20000 | 2.5 | 64000 | 4.2 |
| 75% | 2026-01-25 00:00:00 | 55000 | 4.25 | 92500 | 4.45 |
| max | 2026-01-31 00:00:00 | 120000 | 10 | 120000 | 4.8 |
| std | NaN | 49708.8 | 2.9761 | 45410 | 0.335942 |
元のデータは8行ですが、欠損値が入った列では count が8より小さくなります。
このように、describe() の count を見ると、欠損値の有無に気づくきっかけになります。
ただし、欠損値を正確に確認するなら、isnull().sum() を使う方がわかりやすいです。
df_nan.isnull().sum()
| 日付 | 0 |
| 商品 | 0 |
| カテゴリ | 0 |
| 店舗 | 0 |
| 単価 | 0 |
| 数量 | 0 |
| 売上 | 1 |
| 満足度 | 1 |
describe() は欠損値チェックの入口にはなりますが、欠損値の場所や件数を詳しく見るには isnull() と組み合わせるのがおすすめです。
よくあるミス
ここでは、describe() を使うときに初心者がつまずきやすいポイントを整理します。
数値列しか表示されないと思って混乱する
df.describe() は、標準では主に数値列を対象にします。
文字列列も確認したい場合は、include='all' や include='object' を使います。
df.describe(include='all')
df.describe(include='object')
countを行数だと思ってしまう
count は、欠損値を除いた件数です。
行数そのものを確認したい場合は、len(df) や df.shape を使います。
50%を平均値だと思ってしまう
50% は中央値です。
平均値は mean です。
平均値と中央値は違うので、混同しないようにしましょう。
stdの意味がわからないまま読み飛ばす
std は標準偏差で、値のばらつきを表します。
細かい数式まで理解しなくても、初心者のうちは「大きいほどばらつきが大きい」と考えれば十分です。
include=’all’でNaNが出て不安になる
include='all' では、数値列にしか意味がない項目、文字列列にしか意味がない項目が混在します。
そのため、該当しない部分に NaN が出ることがあります。
これはエラーではありません。
実務でのおすすめ確認手順
CSVやExcelを読み込んだあと、最初に何を確認すればよいかわからない場合は、次の順番がおすすめです。
df.head()
df.info()
df.describe()
df.describe(include='all')
df.isnull().sum()
それぞれの役割は次のとおりです。
| 手順 | 使うメソッド | 確認すること |
|---|---|---|
| 1 | head() |
データの先頭を確認 |
| 2 | info() |
列名・型・欠損値を確認 |
| 3 | describe() |
数値列の統計量を確認 |
| 4 | describe(include='all') |
文字列列も含めて確認 |
| 5 | isnull().sum() |
欠損値の件数を確認 |
この流れを覚えておくと、データ分析の最初の確認で迷いにくくなります。
まとめ
この記事では、pandas の describe() の使い方を解説しました。
describe() は、DataFrameやSeriesの要約統計量をまとめて確認するメソッドです。
特に数値列では、次の項目を確認できます。
| 項目 | 意味 |
|---|---|
count |
欠損値を除いた件数 |
mean |
平均値 |
std |
標準偏差 |
min |
最小値 |
25% |
第1四分位数 |
50% |
中央値 |
75% |
第3四分位数 |
max |
最大値 |
重要なポイントは次のとおりです。
df.describe()は標準では数値列を中心に表示する- 文字列列も含めたい場合は
include='all'を使う - 文字列列だけ確認したい場合は
include='object'を使う - 数値列を除外したい場合は
exclude='number'を使う percentilesで表示する分位点を変更できる- 日付列では、件数や最小日付・最大日付の確認に使える
meanと50%、minとmaxを見ると、外れ値や偏りに気づきやすいdescribe()は統計量、info()は型・欠損値・列構造の確認に向いている- まず
info()で構造を確認し、その後describe()で数値の特徴を見るとよい
describe() を使いこなせるようになると、データを読み込んだ直後に、平均値・ばらつき・外れ値・欠損値の手がかりをすばやく確認できます。
公式ドキュメント
より詳しい仕様を確認したい場合は、pandas公式ドキュメントも参考になります。
初心者のうちは、この記事で基本的な読み方を押さえたうえで、引数や細かい仕様を公式ドキュメントで確認する流れがおすすめです。
次に読みたい関連記事
describe() を理解したあとは、次の記事もあわせて読むと、DataFrameの確認・前処理・集計までつながりやすくなります。
- Pandas DataFrame入門|作り方・基本操作をわかりやすく解説
- Pandas head()の使い方|先頭の表示・行数指定(df.head(n))を例で解説
- 欠損値を可視化して攻略!Pandas isnullとヒートマップ活用術
- pandas fillna()の使い方|欠損値を0・平均値・中央値・最頻値で埋める方法を初心者向けに解説
- pandas to_numeric()の使い方|文字列の数字を数値に変換する方法
- pandas astype()の使い方|文字列・数値への型変換とエラー対処を初心者向けに解説
- pandas select_dtypes()の使い方|データ型で列を選ぶ方法を初心者向けに解説
- pandas value_counts()の使い方|件数集計・割合表示・欠損値の数え方を解説
- Google ColabでCSVを読み込む方法|Drive連携とpandas read_csvを初心者向けに解説
コメント