- 技術 💻
N/Aとは?意味・読み方と書き方|NaN・NULL・NAとの違いを実行比較
結論
N/A(エヌエー)は、英語の Not Applicable(該当しない)または Not Available(利用できない・入手できない)の略で、表や書類の欄に「当てはまらない」「値が無い」ことを示す記号です。データ分析やプログラミングでは「欠損値(値が欠けている)」の意味で使われ、pandas の NaN、R の NA、SQL の NULL、JavaScript の null・undefined が同じ役割を受け持ちます。
この記事でわかること
- 書類・表・データ分析・プログラミングでの N/A の意味の違いと、書類での正しい書き方
- pandas・R・SQL(SQLite・PostgreSQL)・JavaScript で N/A に当たる値を実行して比べた結果
- 同じ8行のデータでも、平均が 75・37.5・60・エラーに分かれた集計の実測と、扱い方の判断表
N/A は、見る場面によって意味が少しずつ変わります。まず「人が書いた N/A」か「機械が扱う欠損値」かを分けると、意味と扱い方が決まります。
flowchart LR
A[N/A] --> B{どこで<br>見たか}
B --> C[書類<br>該当しない]
B --> D[表・商品<br>値が無い]
B --> E[データ<br>欠損値<br>NaN・NA・NULL]
よく調べられることの答えを先にまとめます。
| 知りたいこと | 答え | 詳しい節 |
|---|---|---|
| N/Aとは | 「該当しない」または「利用できない・値が無い」を表す略語 | N/Aとは(場面別の意味の表) |
| N/Aの読み方・何の略 | エヌエー。Not Applicable・Not Available の略 | N/Aの読み方と何の略か |
| na の意味(小文字・スラッシュなし) | n/a・NA・N.A. も同じ意味で使われる。データでは「NA」が欠損値の文字として扱われることがある | 書類・アンケート・表でのN/Aの書き方 |
| 書類でN/Aと書いてよいか | 英文の書類・フォームでは一般的。日本語の書類なら「該当なし」と書くほうが伝わる | 書類・アンケート・表でのN/Aの書き方 |
| N/Aと空欄・0の違い | 空欄は「書き忘れ」と区別できない。0 は「値が0」という別の意味になる | N/Aと空欄・0・「-」・「不明」の違い |
| データ分析での N/A(欠損値) | pandas は NaN・NA、R は NA、SQL は NULL、JavaScript は null・undefined・NaN | データ分析のN/A(欠損値)とは |
| 平均を出すと N/A はどうなる | 多くの道具は除いて計算する。0 として数えると平均が下がる。文字列のまま入れると結果が変わる | 集計でN/Aはどう扱われるか |
| #N/A との違い | #N/A は Excel のエラー値として表示されるもの。人が書く N/A とは別 | N/Aとは(場面別の意味の表) |
確認環境:Ubuntu 24.04.5 LTS の作業用フォルダーで、Python 3.13.18・pandas 3.0.5・NumPy 2.5.3、R 4.3.3(Ubuntu の r-base-core パッケージを作業用フォルダーに展開して起動)、Python 同梱の SQLite 3.53.1、PostgreSQL 16.15(作業用フォルダーに一時的なデータベースを作り 127.0.0.1 だけで起動し、確認後に削除)、Node.js 22.23.4 を使いました。欠けた値を「N/A」「n/a」「#N/A」「空欄」「NA」「NULL」で書いた同じ8行の CSV を各道具で読み込み、件数・合計・平均・並べ替え・比較の結果とエラーの原文を写しています。環境変数を空にした状態(env -i、言語は LANG=C.UTF-8)で動かしたので、エラーは英語の原文です。言葉の意味は Oxford Learner's Dictionaries と Merriam-Webster、各道具の仕様は pandas・R・SQLite・PostgreSQL・MDN の公式ドキュメントで確かめました。Excel・Windows・Mac の操作は扱っていません。図は mermaid で描画を確かめています(確認日 2026年10月29日)。
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「N/Aとは?意味・読み方と書き方|NaN・NULL・NAとの違いを実行比較」
N/Aとは(場面別の意味の表)
この節では、N/A が書類・表・データ・プログラムの場面ごとに何を指すのかが分かります。
N/A は、ある欄に「入れるべき値が無い」ことを、空欄にせずに示すための記号です。Oxford Learner's Dictionaries は n/a を書き言葉の略語とし、「not applicable(質問が自分に当てはまらないときにフォームに書く答え)」と「not available」の2つの意味を載せています。Merriam-Webster も同じ2つを挙げています。
| 場面 | N/A が指すもの | 例 |
|---|---|---|
| 申込書・アンケート | 質問が自分に当てはまらない(Not Applicable) | 勤務先の欄に、学生が N/A と書く |
| 商品ページ・メニュー | 今は提供していない・在庫が無い(Not Available) | サイズ L:N/A |
| 比較表・仕様表 | その項目が無い・まだ決まっていない | 発売前の機種の価格:N/A |
| 調査・統計の表 | 回答なし・値を出せない(No Answer の意味でも使われる) | 回答者 0 人の地域の平均:N/A |
| データ分析 | 欠損値。pandas の NaN、R の NA など | CSV の「N/A」を読み込むと NaN になる |
| プログラミング・データベース | 値が無いことを表す特別な値。SQL の NULL、JavaScript の null・undefined | 未登録の電話番号の列が NULL |
| 表計算ソフト | #N/A は Excel のエラー値として表示される。人が書く N/A とは別のもの | セルに #N/A |
アルファベットの並びが同じでも、スラッシュの無い「NA」「Na」は別の意味のことがあります。自動車の NA は Naturally Aspirated(自然吸気エンジン)、地域の NA は North America(北米)、国名コードの NA はナミビア、化学の Na はナトリウムの元素記号です。前後の文脈で見分けます。
1人が書く N/A
書類や表で「当てはまらない」「値が無い」を伝える記号。読む人に理由が伝わるかが大事。
2機械が扱う欠損値
NaN・NA・NULL・null。集計や比較のときに、普通の値とは違う動きをする。
3表計算の #N/A
Excel のエラー値として表示されるもの。データとして書き出すと「#N/A」という文字列になる。
N/Aの読み方と何の略か(Not Applicable・Not Available)
この節では、N/A の読み方と、元になった英語の違いが分かります。
読み方は「エヌエー」です。英語の会話では「エヌ・エイ」と文字のまま読むか、元の「not applicable」と言い直します。会話の中で略語として使うより、書き言葉で使う記号です。
| 元の英語 | 日本語の意味 | 使う場面 |
|---|---|---|
| Not Applicable | 該当しない・適用されない | 申込書・アンケート・チェックリスト |
| Not Available | 利用できない・入手できない・データが無い | 商品・在庫・統計・仕様表 |
| No Answer | 回答なし | 調査の集計表(辞書の見出しではなく、慣用として) |
| No longer available | 提供終了・廃盤 | 商品の一覧(同上) |
Not Applicable(該当しない)
質問そのものが自分に当てはまらない
値は「存在しない」と分かっている
例:独身の人の配偶者の氏名欄
Not Available(利用できない)
値はあるはずだが、今は出せない・分からない
後で埋まる可能性がある
例:集計中の売上、発売前の価格
この2つの違いは、データの扱いでも大事になります。「該当しない」は値が無いことが確定していて、「利用できない」は値が分からないだけです。データ分析では、どちらも同じ欠損値になってしまうので、区別が要るときは別の列に理由を残します(後の判断表の節で扱います)。
N/Aと空欄・0・「-」・「不明」の違い
この節では、N/A の代わりに空欄・0・ハイフン・「不明」と書いたときに、意味がどう変わるのかが分かります。
N/A を書く理由は、「書き忘れ」と「当てはまらない」を読む人が区別できるようにするためです。空欄のままだと、記入漏れなのか、書く必要が無かったのかが分かりません。
| 書き方 | 読む人が受け取る意味 | データにしたとき |
|---|---|---|
| N/A | 当てはまらない・値が無い(意図して書いた) | pandas では欠損値(NaN)として読まれる。SQL の数値の列には入らない |
| 空欄 | 書き忘れか、書く必要が無かったのか分からない | 多くの道具で欠損値になる。文字列の列では空文字のまま残ることもある |
| 0 | 値が0(売上0円・欠席0回) | 普通の数値として集計に入る。平均が下がる |
| -(ハイフン) | 該当なし・該当数字なし(日本の統計表でも使われる) | pandas の既定では欠損値にならず、文字列として残った(半角・全角とも) |
| 不明 | 値はあるはずだが分からない | 文字列。数値の列に混ざると、列全体が文字列になる |
| 該当なし | 当てはまらない(日本語で最も誤解が少ない) | 文字列。欠損値に変えるには指定が要る |
「値が無い」を0で書いてしまう
見分ける問い:「その値は本当に0なのか、値が無いのか」
手元で測ると、8人のうち4人の点数が無いデータで、無い人を除いた平均は 75 点、0 として数えた平均は 37.5 点でした(集計の節で詳しく比べます)。
書類・アンケート・表でのN/Aの書き方
この節では、英文の申込書・アンケート・ビジネス資料で N/A を書くときの書き方と、日本語の書類での言い換えが分かります。
英文のフォームで、自分に当てはまらない欄があるときは「N/A」と書くのが一般的です。空欄のまま出すと、記入漏れと受け取られて差し戻されることがあります。ただし「該当しない場合は空欄」と書類に指示があるときは、その指示に従います。
書類の指示を読む
記入例・注意書きに「該当しない場合は N/A」「空欄のまま」「斜線を引く」などの指定が無いかを先に見る。指定があればそれに合わせる。
当てはまらない欄に N/A と書く
ミドルネーム(Middle Name)が無い、勤務先が無い、自宅の固定電話が無い、などの欄に N/A と書く。大文字の N/A が最も多く、n/a も同じ意味で通じる。
必須の欄には書けるか確かめる
Web フォームの必須欄は、N/A という文字を受け付けないことがある(電話番号の欄に数字以外を入れると弾かれるなど)。入れられないときは、問い合わせ先に確かめる。
表では凡例を付ける
資料の表で N/A を使うなら、表の下に「N/A:該当なし」「N/A:集計中」のように意味を1行添える。Not Applicable と Not Available のどちらの意味かを読む人が迷わない。
日本語の書類では言葉で書く
日本語の書類や社内資料では「該当なし」「なし」「対象外」「未定」と書いたほうが、英語の略語に慣れていない人にも伝わる。
表記の揺れ(N/A・n/a・NA・N.A.)
| 表記 | 主な使われ方 | データに取り込むとき(pandas の既定) |
|---|---|---|
| N/A | 最も一般的。書類・表・Web | 欠損値になる |
| n/a | 同じ意味。英文の表・仕様書 | 欠損値になる |
| NA | 統計ソフトの表記(R の欠損値は NA) | 欠損値になる(国名コードのナミビアも消える) |
| N.A. / n.a. | 金融・統計の表で使われることがある | 欠損値にならず文字列のまま残った |
| #N/A | Excel のエラー値として表示される | 欠損値になる |
表に「N/A」を書くと、それをデータとして読み込んだ側では欠損値として扱われます。資料をそのまま分析に回す予定があるなら、N/A の意味(該当なし・集計中など)を別の列に書いておくと、後で区別できます。
データ分析のN/A(欠損値)とは:NaN・NA・NULL・null の対応表
この節では、データ分析やプログラミングで N/A に当たる値が、言語ごとに何と呼ばれるのかが分かります。
データ分析では、値が欠けていることを「欠損値(missing value)」と呼び、道具ごとに専用の値で表します。名前は違っても「値が無い」ことを表す役割は同じです。ただ、比較や集計のときの動きが道具ごとに違い、そこでつまずきます。
| 道具 | 欠損値を表す値 | 欠損かどうかの調べ方 | 自分自身と比べると |
|---|---|---|---|
| pandas(Python) | NaN・pd.NA・None・NaT | pd.isna(x)・df.isna() |
NaN は False、pd.NA は <NA> |
| Python 本体 | None(数値なら float('nan')) | x is None・math.isnan(x) |
None は True、nan は False |
| R | NA(NaN・NULL は別もの) | is.na(x) |
NA |
| SQL | NULL | x IS NULL |
NULL(真でも偽でもない) |
| JavaScript | null・undefined(数値なら NaN) | x == null・Number.isNaN(x) |
null は true、NaN は false |
| JSON | null だけ(NaN は書けない) | 読み込んだ言語の調べ方 | - |
NaN(Not a Number)は本来「数として表せない計算結果(0÷0 など)」を表す浮動小数点の値で、「欠けている」という意味ではありません。pandas や NumPy が、数値の列の欠損値の入れ物として借りて使っているため、欠損値の代表のように見えます。
- 1「値が無い」と比べても一致しないNaN == NaN は False、SQL の NULL = NULL は NULL。調べるときは専用の関数を使う
- 2計算に混ざると結果も欠損値になるNaN + 1 は NaN、R の mean(c(1, NA)) は NA
- 3集計関数の多くは、欠損値を除いて計算するpandas の mean・SQL の AVG。R は na.rm = TRUE を付けたときだけ
- 4文字の「N/A」は、欠損値に変えるまでただの文字列読み込み時の指定で欠損値にするか、数値に変換するときにエラーになる
pandasのNaN・NA・None・NaTの違い(実行結果)
この節では、pandas で欠損値を表す4つの値の違いと、比較・計算・グループ集計・結合での動きが分かります。
pandas は、列の型によって欠損値の入れ物を使い分けます。公式ドキュメント(Working with missing data)によると、NumPy の型の列は numpy.nan、日付・時間の列は NaT、Int64 などの「欠損を持てる型」の列は pd.NA を使い、isna() は None も欠損値として扱います。
import pandas as pd, numpy as np
nan = float("nan")
print("nan == nan:", nan == nan, "| None == None:", None == None)
for v in [np.nan, None, pd.NA, pd.NaT]:
print(repr(v), "isna:", pd.isna(v))
print(pd.Series([1, None, 3]).dtype, pd.Series([1, None, 3], dtype="Int64").tolist())
print("pd.NA == 1:", pd.NA == 1, "| pd.NA | True:", pd.NA | True, "| pd.NA & False:", pd.NA & False)
bool(pd.NA)
nan == nan: False | None == None: True
nan isna: True
None isna: True
<NA> isna: True
NaT isna: True
float64 [1, <NA>, 3]
pd.NA == 1: <NA> | pd.NA | True: True | pd.NA & False: False
Traceback (most recent call last):
...
TypeError: boolean value of NA is ambiguous
| 値 | 使われる列 | 手元で確かめた動き |
|---|---|---|
| NaN(np.nan) | float64 などの数値の列。pandas 3.0 の文字列の列(str) | nan == nan は False。[1, None, 3] は整数でなく float64 になり 1.0, nan, 3.0 |
| pd.NA | Int64・boolean・string などの欠損を持てる型 | Int64 なら 1, <NA>, 3 と整数のまま。比較は <NA>、if に入れると TypeError |
| None | object 型の列。読み込み時は NaN に置き換わることが多い | None + 1 は TypeError。object 型の sum は None を飛ばして 4 |
| NaT | 日付・時間の列 | isna で True。日付の計算に混ざると NaT |
集計・並べ替え・結合での欠損値
np.mean: nan np.nanmean: 2.0 np.sum: nan np.nansum: 4.0
pandas mean: 2.0 skipna=False: nan
全部 NaN の sum: 0.0 min_count=1 を付けると: nan
groupby 既定: {'A': 3, 'B': 4}
groupby dropna=False: {'A': 3, 'B': 4, nan: 3}
sort: [1.0, 3.0, nan] na_position=first: [nan, 1.0, 3.0]
merge on NaN key:
k a b
0 x 1 10
1 NaN 2 20
sorted() に nan を混ぜる: [3, nan, 1, 2]
statistics.mean([1, nan, 3]): nan
- NumPy の np.mean は欠損値があると nan、pandas の mean は除いて 2.0。同じ配列でも、どちらの関数を呼ぶかで結果が変わりました。
- groupby は既定で欠損値のグループを捨てます。キーが欠けた行の値 3 は、
dropna=Falseを付けたときだけ集計に出ました。 - merge は NaN のキー同士を結び付けました。SQL の JOIN では NULL 同士は一致しないので、同じ結合を SQL に移すと行の数が変わります。
- Python の sorted() は nan が混ざると並べ替えが崩れます。[3, nan, 1, 2] のまま返り、エラーも出ませんでした。
Python 本体の None の判定(is None と空文字・0 の違い)は、関連記事「Python None判定はis Noneで|空文字・空リスト・0との違い早見表」で扱っています。
pandas read_csvで「N/A」「NA」が欠損値になる19の文字列
この節では、CSV の中のどの文字が pandas で自動的に欠損値になるのかと、消えてほしくない「NA」を残す方法が分かります。
pandas の read_csv は、既定で19種類の文字列を欠損値(NaN)として読み込みます。公式ドキュメントには「空文字・NaN・N/A・NULL などの一般的な表記」とだけ書かれているため、手元の pandas 3.0.5 の中にある一覧を書き出しました。
default na_values: ['', '#N/A', '#N/A N/A', '#NA', '-1.#IND', '-1.#QNAN', '-NaN', '-nan',
'1.#IND', '1.#QNAN', '<NA>', 'N/A', 'NA', 'NULL', 'NaN', 'None', 'n/a', 'nan', 'null']
この一覧に「NA」が入っているため、国名コードの NA(ナミビア)や、略称の NA(北米)が欠損値として消えます。次の8行の CSV で確かめました。
id,name,country,score,note
1,Sato,JP,80,
2,Suzuki,NA,N/A,欠席
3,Tanaka,US,70,
4,Ito,JP,,未提出
5,Kato,NA,90,
6,Watanabe,JP,n/a,対象外
7,Yamada,US,#N/A,
8,Nakamura,JP,60,NULL
id name country score note
0 1 Sato JP 80.0 NaN
1 2 Suzuki NaN NaN 欠席
2 3 Tanaka US 70.0 NaN
3 4 Ito JP NaN 未提出
4 5 Kato NaN 90.0 NaN
5 6 Watanabe JP NaN 対象外
6 7 Yamada US NaN NaN
7 8 Nakamura JP 60.0 NaN
isna sum: {'id': 0, 'name': 0, 'country': 2, 'score': 4, 'note': 5}
score mean: 75.0 sum: 300.0 count: 4 len: 8
country value_counts: JP 4 / NaN 2 / US 2
点数の列は、N/A・空欄・n/a・#N/A の4通りの書き方が全部 NaN にそろい、数値の列(float64)として読めました。一方、国名の NA と、備考の「NULL」という文字も欠損値になりました。消したくない列があるときは、keep_default_na=False で既定の一覧を止め、欠損値にしたい文字だけを na_values に渡します。
df2 = pd.read_csv("data.csv", keep_default_na=False,
na_values=["", "N/A", "n/a", "#N/A"])
print(df2["country"].tolist())
print(df2["note"].tolist())
['JP', 'NA', 'US', 'JP', 'NA', 'JP', 'US', 'JP']
[nan, '欠席', nan, '未提出', nan, '対象外', nan, 'NULL']
逆に keep_default_na=False だけを付けると、点数の列は '80', 'N/A', '70', '', ... の文字列の列(str)になり、mean() は TypeError: Cannot perform reduction 'mean' with string dtype で止まりました。読み込んだ後に文字列を数値へ変えるときは pd.to_numeric を使います。
pd.to_numeric(["80", "N/A", "70"])
ValueError: Unable to parse string "N/A" at position 1
pd.to_numeric(["80", "N/A", "70"], errors="coerce")
[80.0, nan, 70.0]
pandas の読み込みや欠損値の処理(dropna・fillna)の逆引きは、関連記事「pandasの使い方 逆引き81選|pandas 3.0の実行結果つき」で扱っています。
RのNA・NaN・NULLの違い(実行結果)
この節では、R の NA・NaN・NULL が何を表すかと、平均・論理演算・CSV の読み込みでの動きが分かります。
R の NA は「Not Available」から来た欠損値の値で、N/A と同じ考え方です。R の公式ヘルプのページ名も「'Not Available' / Missing Values」で、NA は欠損値を示す長さ1の論理型の定数と説明されています。NaN は計算できない数、NULL は「何も無い(長さ0)」で、3つは別のものです。
x <- c(80, NA, 70, NA, 90, NaN, 60)
is.na(x)
is.nan(x)
mean(x)
mean(x, na.rm = TRUE)
c(NA == NA, NA & FALSE, NA | TRUE)
NA^0
c(typeof(NA), typeof(NA_real_), typeof(NaN), typeof(NULL))
length(NULL)
c(1, NULL, 3)
NA + NaN
NaN + NA
if (NA) 1
[1] FALSE TRUE FALSE TRUE FALSE TRUE FALSE
[1] FALSE FALSE FALSE FALSE FALSE TRUE FALSE
[1] NA
[1] 75
[1] NA FALSE TRUE
[1] 1
[1] "logical" "double" "double" "NULL"
[1] 0
[1] 1 3
[1] NA
[1] NaN
Error in if (NA) 1 : missing value where TRUE/FALSE needed
Execution halted
| 値 | 意味 | 手元で確かめた動き |
|---|---|---|
| NA | 欠損値(値があるはずだが分からない) | mean は NA。na.rm = TRUE で除くと 75 |
| NaN | 数として表せない計算結果 | is.na でも TRUE。is.nan で NaN だけを見分けられる |
| NULL | 何も無い(長さ0) | c(1, NULL, 3) は 1 3 になり、要素ごと消える |
| NA_character_ など | 型つきの NA | 文字の欠損値は "NA" という文字ではなく NA_character_ で書く(公式ヘルプの注意) |
NA + NaN は NA、NaN + NA は NaN と、並び順で結果が変わりました。公式ヘルプも「NaN が関わる場合は、どちらの結果にもなりうる」と書いています。NA と NaN を区別したい処理では、計算結果ではなく元の値で判定します。
read.csv は「N/A」を欠損値にしない
d <- read.csv("data.csv")
$ country: chr "JP" NA "US" "JP" ...
$ score : chr "80" "N/A" "70" "" ...
mean(d$score)
[1] NA
Warning message:
In mean.default(d$score) : argument is not numeric or logical: returning NA
R の read.csv が既定で欠損値にする文字は「NA」だけです。点数の列は「N/A」「#N/A」が混ざったせいで、数値ではなく文字列(chr)として読まれ、平均は警告付きの NA になりました。na.strings = c("", "NA", "N/A", "n/a", "#N/A", "NULL") を付けると、点数の列が整数(int)になり、mean(d2$score, na.rm = TRUE) は 75 でした。国名の NA を残したいときは、na.strings から "NA" を外します。手元では、外したときだけ国名の列の8行とも欠損値にならず、"NA" が文字として残りました。
table(c("A", NA, "B", "A")) → A 2 B 1
table(c("A", NA, "B", "A"), useNA = "ifany") → A 2 B 1 <NA> 1
summary(c(80,NA,70,NA,90,NA,NA,60)) → Mean 75.0 NA's 4
table は既定で NA を数えず、useNA = "ifany" で件数に出ます。summary は欠損値の件数を「NA's」として表示するので、まず summary で欠けている数を確かめるのが手早い方法です。
SQLのNULLとN/A(SQLite・PostgreSQLの実行結果)
この節では、SQL の NULL の比較・集計・並べ替えの動きと、「N/A」という文字を数値の列に入れたときに SQLite と PostgreSQL で起きることが分かります。
SQL では、値が無いことを NULL で表します。NULL は「不明」として扱われ、NULL = NULL も真ではなく NULL になります。判定には IS NULL を使います。
SELECT count(*), count(score), sum(score), avg(score), avg(coalesce(score, 0)) FROM s;
SELECT null = null, null IS NULL, 1 + null;
SELECT count(*) FROM u WHERE score = null;
SELECT count(*) FROM u WHERE score IS NULL;
SELECT count(*) FROM u WHERE score NOT IN (60, null);
PostgreSQL 16.15
count | count | sum | avg | avg
-------+-------+-----+---------------------+---------------------
8 | 4 | 300 | 75.0000000000000000 | 37.5000000000000000
SQLite 3.53.1
select null = null, null is null, 1 + null -> [(None, 1, None)]
where score = null -> [(0,)]
where score is null -> [(4,)]
where score not in (60, null) -> [(0,)]
count(*) は8行すべて、count(score) は NULL を除いた4行を数え、AVG は NULL を除いて 75 でした。= null で探すと0件、NOT IN のリストに NULL が1つ入ると0件になります。どちらもエラーにならないため、気付きにくい誤りです。
「N/A」を文字のまま入れると、SQLite は平均を 37.5 にした
CSV の点数をそのまま(N/A・空欄・n/a・#N/A の文字列のまま)SQLite の列に入れて集計しました。
select id, score, typeof(score) from t
-> (1,'80','text') (2,'N/A','text') (3,'70','text') (4,'','text') ...
select count(*), count(score), sum(score), avg(score) from t
-> [(8, 8, 300.0, 37.5)]
エラーは出ず、count(score) は8、平均は 37.5 になりました。SQLite の公式ドキュメントは avg() について「数に見えない文字列は 0 として解釈する」と書いています。N/A を 0 として数えたのと同じ結果で、欠損値を除いた正しい平均 75 の半分です。数値の列には、取り込む前に N/A を NULL へ置き換えます。
PostgreSQL は「N/A」を数値の列に入れられない
INSERT INTO s VALUES (9, 'N/A');
ERROR: invalid input syntax for type numeric: "N/A"
\copy s FROM 'pgdata.csv' WITH (format csv, header true)
ERROR: invalid input syntax for type numeric: "N/A"
CONTEXT: COPY s, line 2, column score: "N/A"
\copy s FROM 'pgdata.csv' WITH (format csv, header true, null 'N/A')
ERROR: invalid input syntax for type numeric: ""
CONTEXT: COPY s, line 3, column score: ""
PostgreSQL は型の合わない文字を拒むので、集計が黙って変わることはありません。COPY の NULL 'N/A' を付けると N/A は NULL になりますが、今度は空欄の行で止まりました。公式ドキュメントによると、CSV 形式の NULL の既定は「引用符の無い空文字」で、NULL オプションはそれを置き換えるため、空欄と N/A の両方を同時に NULL にはできません。両方が混ざる CSV は、取り込む前に表記を1つにそろえます。
並べ替えでの NULL の位置と、PostgreSQL の NaN
| 確かめたこと | SQLite 3.53 | PostgreSQL 16 |
|---|---|---|
| ORDER BY score(昇順)の先頭 | NULL の行が先頭(id 2, 4, 6) | 値の小さい順(id 8, 3, 1, 5)、NULL は最後 |
| ORDER BY score DESC の先頭 | NULL は最後 | NULL の行が先頭(id 6, 2, 7, 4) |
| 0件の SUM | NULL(total() は 0.0) | - |
| 'NaN' = 'NaN' | - | true(NaN は全ての数より大きい扱い) |
| NaN を含む AVG | - | NaN |
SQLite は「NULL を他のどの値より小さい」、PostgreSQL は「NULL を他のどの値より大きい」として並べると、それぞれの公式ドキュメントに書かれています。データベースを移すと、同じ ORDER BY で NULL の位置が逆になります。位置を固定したいときは NULLS FIRST・NULLS LAST を書きます。PostgreSQL は並べ替えと索引のために NaN 同士を等しいとみなし、IEEE 754 の決まり(NaN は自分とも等しくない)とは違う動きをします。
NOT IN と三値論理の落とし穴は関連記事「SQLのNULLの落とし穴8選|NOT IN・三値論理」で、集計関数ごとの NULL の扱いは関連記事「SQL集計関数一覧|SUM・AVG・MAX・MIN・COUNTとNULLの扱い」で扱っています。
JavaScriptのnull・undefined・NaNの違い(実行結果)
この節では、JavaScript で「値が無い」を表す null・undefined と、数にならない NaN の違いと、N/A という文字を数値にしたときの動きが分かります。
JavaScript には「値が無い」を表す値が2つあります。null は「値が無いことを意図して入れた」値、undefined は「まだ値が入っていない」状態です。NaN は数値型の「数ではない」値で、文字の「N/A」を数に変えると NaN になります。
node v22.23.4
typeof null / undefined / NaN object / undefined / number
null == undefined true
null === undefined false
NaN === NaN false
Object.is(NaN, NaN) true
isNaN('N/A') true
Number.isNaN('N/A') false
Number('N/A') / Number('') / Number(null) [ NaN, 0, 0 ]
Number(undefined) NaN
null + 1 / undefined + 1 [ 1, NaN ]
[1,null,3] sum 4
[1,undefined,3] sum NaN
Math.max(1, undefined) NaN
JSON.stringify {"b":null,"c":null,"d":[null]}
JSON.parse NaN SyntaxError: Unexpected token 'N', "{"a": NaN}" is not valid JSON
0 || 'N/A' / 0 ?? 'N/A' N/A / 0
null ?? 'N/A' / undefined ?? 'N/A' N/A / N/A
default param: f(undefined) / f(null) [ '既定', null ]
[NaN].includes(NaN) / indexOf true / -1
o.missing.x TypeError: Cannot read properties of undefined (reading 'x')
null.x TypeError: Cannot read properties of null (reading 'x')
| 値 | 意味 | 手元で確かめた動き |
|---|---|---|
| null | 値が無いことを意図して入れた | typeof は "object"。null + 1 は 1(0 として計算) |
| undefined | 値がまだ入っていない・存在しないプロパティ | undefined + 1 は NaN。JSON.stringify ではキーごと消える |
| NaN | 数にならない値(Number("N/A") など) | NaN === NaN は false。JSON にすると null に変わる |
- null は計算で 0 として扱われ、undefined は NaN になりました。[1, null, 3] の合計は 4、[1, undefined, 3] は NaN です。null が混ざった合計は、エラーにも NaN にもならずに値が変わります。
- isNaN('N/A') は true、Number.isNaN('N/A') は false。MDN の説明どおり、isNaN は数に変換してから調べ、Number.isNaN は値そのものが NaN のときだけ true を返します。
- 表示用に「N/A」を出すなら
??を使います。0 || 'N/A'は 0 点を N/A にしてしまい、0 ?? 'N/A'は 0 を残しました。 - JSON には NaN が書けません。JSON.stringify は NaN を null に変え、JSON.parse は NaN の入った文字列を SyntaxError で拒みました。Python の
json.dumpsは既定で{"a": NaN}という JSON の仕様に無い形を書き出し、allow_nan=Falseを付けるとValueError: Out of range float values are not JSON compliant: nanで止まりました。
typeof null が "object" になる理由と型の調べ方は関連記事「JavaScript型判定 typeof・instanceof・null早見表」で、undefined のプロパティを読んだときのエラーは関連記事「Cannot read properties of undefined原因7つ」で扱っています。
集計でN/Aはどう扱われるか(平均の実測比較)
この節では、同じデータの平均が、道具と取り込み方によっていくつになるかの実測が分かります。
同じ8人分の点数(80・70・90・60 と、欠けた4人)でも、平均は 75・37.5・60・NaN・エラーに分かれました。欠けた4人は、CSV の中で「N/A」「空欄」「n/a」「#N/A」と書かれています。
| 道具と取り込み方 | 数えた件数 | 平均 | 何が起きたか |
|---|---|---|---|
| pandas read_csv(既定)→ mean | 4 | 75.0 | 4通りの表記が全部 NaN になり、除いて計算 |
| pandas fillna(0) → mean | 8 | 37.5 | 欠けた人を0点として数えた |
| NumPy np.mean(NaN 入りの配列) | - | nan | np.nanmean なら除いて計算 |
| R read.csv(既定)→ mean | - | NA(警告) | N/A が混ざり列が文字列になった |
| R na.strings 指定 → mean(na.rm = TRUE) | 4 | 75 | na.rm を付けないと NA |
| SQLite(文字列のまま)→ AVG | 8 | 37.5 | 数に見えない文字を0として計算。エラーなし |
| SQLite・PostgreSQL(NULL にして)→ AVG | 4 | 75 | NULL を除いて計算 |
| PostgreSQL(文字列のまま) | - | エラー | invalid input syntax for type numeric: "N/A" |
| JavaScript Number() → 合計 ÷ 件数 | 8 | NaN | NaN が1つでも混ざると結果が NaN |
| JavaScript NaN だけ除く | 5 | 60 | 空欄は Number('') で 0 になり、残った |
エラーで止まる道具(PostgreSQL・pandas の to_numeric)は、少なくとも間違いに気付けます。危ないのは、エラーを出さずに数字を返す 37.5 と 60 のほうです。どの集計でも、件数(count)を平均と並べて出すと、欠損値がどう数えられたかが分かります。
平均で埋めると、ばらつきが小さく見える
score の標準偏差(欠損値を除く) : 12.91
欠損値を平均 75 で埋めた後の標準偏差 : 8.45
埋めた後の平均 : 75.0
欠損値を平均で埋めると、平均は変わりませんが、標準偏差は 12.91 から 8.45 に下がりました。同じ値を4つ足したぶん、データが実際より揃って見えます。埋めた値で検定や相関を出すと、結果が実際より強く出ることがあります。
N/Aの扱い方の判断表(除く・0にする・埋める・残す)
この節では、N/A(欠損値)を見つけたときに、除く・0にする・別の値で埋める・そのまま残すのどれを選ぶかが分かります。
まず「その値は本当は存在するのか(Not Available)、そもそも存在しないのか(Not Applicable)」を決めます。次に、欠けている理由を残したまま、集計の目的に合う扱い方を選びます。
| 状況 | 扱い方 | 理由 |
|---|---|---|
| 試験を受けていない人の点数 | 除いて集計し、件数を併記 | 0点ではない。受けた人の平均と受験率を分けて出す |
| 注文が無かった日の売上 | 0 にする | 本当に0円。除くと1日あたりの売上が上がって見える |
| センサーが一瞬止まった時系列 | 前後の値で埋める(補間) | 値は存在した。短い欠けなら前後から推定できる |
| 独身の人の「配偶者の年齢」 | そのまま残す(該当しない) | 値は存在しない。埋めると意味の無い数字が生まれる |
| アンケートの「答えたくない」 | 別の選択肢として数える | 回答の一種。欠損値にすると傾向が消える |
| 欠けている行が全体の数% | 行ごと除く(dropna) | 影響が小さい。何行除いたかを記録する |
| 特定の人だけ欠けやすい(偏りがある) | 除かずに理由を分析する | 除くと、残った人だけの偏った結果になる |
| 画面・帳票への表示 | 「N/A」「-」「該当なし」と表示 | データは NULL のまま、表示のときだけ文字にする |
- 1読み込んだら欠損値の件数を最初に見るpandas は df.isna().sum()、R は summary()、SQL は count(*) と count(列) の差
- 2N/A の表記を1つにそろえてから取り込むN/A・空欄・#N/A・-が混ざると、道具によって欠損値になるものとならないものが分かれる
- 3数値の列に文字を入れないSQLite は文字を0として平均した。データベースには NULL で入れ、表示のときに N/A と出す
- 4欠けている理由を別の列に残す欠席・対象外・集計中を1つの NaN にまとめると、後で区別できない
- 5平均と一緒に件数を出す「平均 75 点(4人)」と書けば、何人分の平均かが読む人に伝わる
N/Aのよくあるつまずき(症状→原因→直し方)
この節では、N/A や欠損値で起きやすい症状と、その原因・直し方が分かります。
| 症状(原文) | 原因 | 直し方 |
|---|---|---|
| 国名コードの NA(ナミビア)が NaN になった | pandas の既定の欠損値の一覧に "NA" がある | keep_default_na=False と na_values で欠損値にする文字を指定 |
| ValueError: Unable to parse string "N/A" at position 1 | pd.to_numeric に N/A の文字が残っている | errors="coerce" で NaN にする(変換できなかった件数も確かめる) |
| TypeError: Cannot perform reduction 'mean' with string dtype | 点数の列が文字列のまま | 読み込み時に na_values を指定するか to_numeric で数値にする |
| TypeError: boolean value of NA is ambiguous | pd.NA を if や and・or に入れた | pd.isna() で先に判定する。条件の組み合わせは &・| を使う |
| argument is not numeric or logical: returning NA | R の read.csv で N/A が混ざり列が文字列になった | na.strings に "N/A" などを足して読み直す |
| missing value where TRUE/FALSE needed | R の if に NA が入った | is.na() で先に分ける。isTRUE() で包む |
| invalid input syntax for type numeric: "N/A" | PostgreSQL の数値の列に N/A の文字を入れた | NULL に置き換えて入れる。COPY なら NULL 'N/A'(空欄が無いとき) |
| 平均が想定の半分(エラーなし) | SQLite の列に N/A を文字のまま入れ、0として平均された | 取り込み前に NULL に置き換え、count(列) で件数を確かめる |
| WHERE 列 = NULL で0件 | NULL との比較は NULL(真にならない) | IS NULL・IS NOT NULL を使う |
| 平均が NaN と表示される | NumPy の mean や JavaScript の合計に NaN が混ざった | np.nanmean、または Number.isNaN で除いてから計算 |
| 0点の人が「N/A」と表示される | JavaScript で score || 'N/A' と書いた |
score ?? 'N/A' に変える |
| SyntaxError: ... "{"a": NaN}" is not valid JSON | Python の json.dumps が NaN をそのまま書き出した | NaN を None に置き換えて null として出す。allow_nan=False で早めに気付く |
欠損値の判定を == で書く
df[df["score"] == np.nan]・WHERE score = NULL・x === NaN。どれもエラーにならず、0件や false を返すdf["score"].isna()・WHERE score IS NULL・Number.isNaN(x)・R は is.na(x)見分ける問い:「欠損値専用の関数で調べているか」
よくある質問
Q. N/Aの読み方は?
A. 「エヌエー」です。英語では文字のまま「エヌ・エイ」と読むか、元の「not applicable」「not available」と言います。
Q. N/Aは日本語で何と言いますか?
A. Not Applicable なら「該当なし」「対象外」、Not Available なら「利用不可」「データなし」「未定」です。日本語の書類では、これらの言葉で書くほうが伝わります。
Q. 英語の申込書で当てはまらない欄は空欄でよいですか?
A. 書類に指示が無ければ N/A と書くのが一般的です。空欄だと記入漏れと区別できず、確認の連絡が来ることがあります。「該当しない場合は空欄」と指示があるときはそれに従います。
Q. N/A と n/a、NA の違いはありますか?
A. 意味は同じです。ただしデータとして読み込むと扱いが分かれます。pandas の既定では N/A・n/a・NA が欠損値になり、N.A. は文字のまま残りました。R の read.csv の既定では NA だけが欠損値になりました。
Q. N/A と #N/A は同じですか?
A. 別のものです。N/A は人が書く「該当なし」の記号で、#N/A は Excel のエラー値として表示されるものです。CSV に「#N/A」という文字が入っていると、pandas は既定で欠損値として読みました。
Q. N/A を 0 にしてもよいですか?
A. 値が本当に0のときだけです。手元のデータでは、欠けた4人を0点にすると平均が 75 から 37.5 に下がりました。「値が無い」と「値が0」は別の意味です。
Q. NaN と NA と NULL の違いは?
A. NaN は「数として表せない値」で、pandas が数値の列の欠損値に借りて使っています。NA は R や pandas の欠損値、NULL は SQL の「値が無い」です。どれも自分自身と比べても一致しない(または不明になる)ので、isna・is.na・IS NULL などの専用の方法で調べます。
Q. null と undefined はどう使い分けますか?
A. null は「値が無いことを意図して入れる」とき、undefined は「まだ入っていない」状態です。API の応答で「値が無い」を返すなら null にすると、JSON にしたときにキーが残ります(undefined はキーごと消えました)。
Q. 欠損値は消すのと埋めるのとどちらがよいですか?
A. 欠けた理由で決まります。少数でランダムに欠けているなら除き、時系列の短い欠けなら前後で埋め、そもそも存在しない値(該当しない)は残します。平均で埋めると、手元ではばらつき(標準偏差)が 12.91 から 8.45 に小さくなりました。
Q. グラフや帳票に N/A と表示したいときは?
A. データは NULL・NaN のまま持ち、表示のときだけ文字に変えます。SQL は COALESCE(CAST(score AS TEXT), 'N/A')、JavaScript は score ?? 'N/A' で、値のある行はそのまま、欠けた値だけが N/A になりました(JavaScript では 0 も 0 のまま残りました)。
まとめ
- N/A は Not Applicable(該当しない)または Not Available(利用できない)の略で、読み方はエヌエー。空欄と違い「書き忘れではない」ことを伝えられる。
- 書類では、指示が無ければ当てはまらない欄に N/A と書く。日本語の書類なら「該当なし」と言葉で書くほうが伝わる。表に使うときは意味を1行添える。
- データ分析では N/A は欠損値。pandas は NaN・pd.NA、R は NA、SQL は NULL、JavaScript は null・undefined・NaN が受け持ち、どれも == では調べられない。
- 同じ8行でも平均は 75・37.5・60・NaN・エラーに分かれた。pandas は「NA」も欠損値にしてナミビアを消し、SQLite は文字の N/A を0として黙って平均した。
- N/A の表記をそろえて NULL・NaN で取り込み、欠けた理由を別に残し、平均には件数を併記する。表示のときだけ N/A と出す。
参考・出典
確認日:2026年10月29日
- Oxford Learner's Dictionaries「n/a」:https://www.oxfordlearnersdictionaries.com/definition/english/n-a
- Merriam-Webster「N/A」:https://www.merriam-webster.com/dictionary/N%2FA
- pandas「Working with missing data」:https://pandas.pydata.org/docs/user_guide/missing_data.html
- pandas「pandas.read_csv」(na_values・keep_default_na):https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html
- R「'Not Available' / Missing Values」(NA):https://stat.ethz.ch/R-manual/R-devel/library/base/html/NA.html
- SQLite「Built-in Aggregate Functions」:https://www.sqlite.org/lang_aggfunc.html
- SQLite「SELECT」(ORDER BY と NULL):https://www.sqlite.org/lang_select.html
- PostgreSQL 16「COPY」(NULL・FORCE_NULL):https://www.postgresql.org/docs/16/sql-copy.html
- PostgreSQL 16「Sorting Rows (ORDER BY)」:https://www.postgresql.org/docs/16/queries-order.html
- PostgreSQL 16「Numeric Types」(NaN の扱い):https://www.postgresql.org/docs/16/datatype-numeric.html
- MDN「null」:https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/null
- MDN「NaN」:https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/NaN
- Wikipedia「ISO 3166-1 alpha-2」(英語版。NA = Namibia):https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「N/Aとは?意味・読み方と書き方|NaN・NULL・NAとの違いを実行比較」
株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。
WE ARE HIRING
RJCで一緒に開発しながら、
成長を楽しみませんか?
RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!
- 127日年間休日
- 12時間平均残業時間
- 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!
ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。