AI資格ドリル
資格を選ぶ

用語比較

astypeとto_numericの違い|変換できない値の扱いとerrors(pandas・Python3データ分析)

astype は、DataFrame や Series を指定した dtype(データ型)へ変換するメソッドです。一方の to_numeric は、数値型への変換に特化した関数で、errors と downcast で挙動を調整します。

数値にできない文字列が混ざっていると、既定ではどちらも例外になります。後者だけが、errors='coerce' の指定でその値を NaN にして先へ進められます。

この記事の根拠と出典

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

astypeとto_numericの要点

astype

公式の説明は「指定した dtype へ pandas のオブジェクトを変換する」。列ごとに別の dtype を、辞書(列名→dtype)で指定できる。

to_numeric

数値型への変換に特化した関数。errors='coerce' で変換できない値を NaN にでき、downcast でより小さい数値型にできる。

違いを表で確認

比較軸astypeto_numeric
変換先str、numpy の dtype、Python の型などを指定する。category への変換もできる数値型だけ。既定の戻りは float64 か int64
列ごとの指定辞書(列名→dtype)で、列ごとに別の型を指定できる引数に渡した1つのスカラー、リスト、1次元配列、Index、Series を変換する
変換できない値既定の errors='raise' で例外になる既定の errors='raise' では ValueError。errors='coerce' なら NaN になる
型を小さくするdtype に int32 などを直接指定するdowncast で、整数・符号なし・浮動小数点の最小の型にする

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

PR

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

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

01

文字列の列に「apple」のような値が混ざっていた人

数値にできない値があると、既定の errors='raise' では ValueError になります。to_numeric に errors='coerce' を指定すると、その値だけが NaN になり、残りは数値に変わります。

02

複数の列を、別々の型にまとめて変えたい人

astype に辞書(列名→dtype)を渡すと、列ごとに別の dtype を指定できます。公式の例では、col1 だけを int32 にして col2 はそのままにしています。

03

メモリを減らすため数値型を小さくしたい人

to_numeric の downcast を使います。公式の例では、downcast='signed' で int8、downcast='float' で float32 になります。

具体例で使い分ける

例 1

astype: 列ごとに型を指定する

公式の例のとおり、d={'col1':[1,2],'col2':[3,4]} から DataFrame を作ります。dtypes は col1 も col2 も int64 です。

  • df.astype('int32') は、すべての列を int32 にします。
  • df.astype({'col1':'int32'}) は、col1 だけを int32 にします。col2 は int64 のままです。

結論: astype は、全列にも列ごとにも dtype を指定できます。

例 2

to_numeric: 変換できない値を NaN にする

公式の例のとおり、s=pd.Series(['apple','1.0','2',-3]) を変換します。

  • pd.to_numeric(s, errors='coerce') の結果は、NaN、1.0、2.0、-3.0 で、dtype は float64 です。
  • 'apple' のように数値にできない値は NaN になります。
  • errors の既定は 'raise' で、数値以外の値があると ValueError になります。

結論: to_numeric は、errors='coerce' で変換できない値を NaN にします。

例 3

to_numeric: downcast で型を小さくする

公式の例のとおり、s=pd.Series(['1.0','2',-3]) を変換します。

  • pd.to_numeric(s) の結果は 1.0、2.0、-3.0 で、dtype は float64 です。
  • downcast='float' を指定すると dtype は float32、downcast='signed' を指定すると、値は 1、2、-3 で dtype は int8 になります。

結論: downcast で、可能な最小の数値型にできます。

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

  1. 1

    変換先を確認する

    数値以外(category など)や、列ごとに別の型なら astype。数値型への変換なら to_numeric も使えます。

  2. 2

    変換できない値の有無を確認する

    数値にできない文字列が混ざっているなら、to_numeric の errors='coerce' で NaN にして、あとで欠損値として扱います。

  3. 3

    型の大きさを確認する

    メモリを抑えたいなら、to_numeric の downcast か、astype の dtype 指定で小さい型にします。

試験での見分け方

  • 1astype は、指定した dtype へ pandas のオブジェクトを変換する。辞書で列ごとに型を変えられる。
  • 2to_numeric は、数値型への変換に使う。すでに数値の dtype なら dtype は保たれる。
  • 3to_numeric の errors の既定は 'raise'。数値にできない値があると ValueError になる。
  • 4errors='coerce' を指定すると、変換できない値は NaN になる。
  • 5downcast は、整数・符号なし・浮動小数点の最小の型にする。

誤答しやすい選択肢

to_numeric が、何も指定せず文字列を飛ばしてくれると考える

修正: 既定の errors='raise' では ValueError になります。変換できない値を NaN にするには errors='coerce' を指定します。

astype でも errors='coerce' が使えると考える

修正: 公式の errors の選択肢は raise と ignore で、coerce はありません。coerce は to_numeric の選択肢です。

to_numeric は列ごとに別の型を指定できると考える

修正: to_numeric は引数を数値型に変換する関数です。列ごとに別の型を指定したいときは、astype に辞書を渡します。

確認問題

Q1pd.to_numeric(pd.Series(['apple','1.0','2',-3]), errors='coerce') で 'apple' はどうなるか?

答え: NaN になる

公式の例の結果は NaN、1.0、2.0、-3.0 で、dtype は float64 です。

Q2to_numeric の errors の既定値は?

答え: 'raise'(数値にできない値があると ValueError)

公式は、errors='raise' が既定で、無効な値があると例外が発生すると説明しています。

Q3DataFrame の col1 だけを int32 にして col2 はそのままにする書き方は?

答え: df.astype({'col1':'int32'})

astype に辞書(列名→dtype)を渡します。公式の例では col2 は int64 のままです。

Q4Series(['1.0','2',-3]) に to_numeric(s, downcast='signed') を使うと dtype は?

答え: int8

公式の例の結果です。downcast='float' なら float32 になります。

到達チェック

  • astype の辞書による列ごとの型指定を書ける
  • to_numeric の errors の既定値を言える
  • errors='coerce' が何をするかを説明できる
  • downcast で型が小さくなることを例で言える

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

よくある質問

Qastype と to_numeric の違いは?

A

astype は指定した dtype へ変換し、辞書で列ごとに型を変えられます。to_numeric は数値型への変換に特化し、errors='coerce' で変換できない値を NaN にできます。

Q数値にできない値を NaN にして変換するには?

A

pd.to_numeric(s, errors='coerce') を使います。公式の例では 'apple' が NaN になります。

Q変換後の NaN はどう扱いますか?

A

dropna で削除するか、fillna で補完します。

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

A

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

次に見る比較

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