pandas の dtypes で列の型を確認・変換する

pandas でデータを正しく処理するには、各列がどのデータ型(dtype)を持っているかを把握しておく必要があります。型が意図しないものになっていると、集計や比較で思わぬ結果を招くことがあるからです。

dtypes で型を確認する

DataFrame の dtypes 属性を参照すれば、各列の型が一覧で確認できます。

import pandas as pd

df = pd.DataFrame({
    "name": ["Alice", "Bob"],
    "age": [25, 30],
    "score": [88.5, 92.0],
    "passed": [True, False]
})
print(df.dtypes)

この例では name が object、age が int64、score が float64、passed が bool と表示されます。object は文字列を含む汎用的な型で、pandas が型を特定できなかったときにも使われます。

int64整数
float64浮動小数点数
object文字列や混合型
bool真偽値
datetime64日時
categoryカテゴリ

astype で型を変換する

型を変換するには astype メソッドを使います。たとえば、整数列を文字列に変換したい場合は次のように書きます。

df["age"] = df["age"].astype(str)
print(df.dtypes)

CSV から読み込んだデータでは、数値のはずの列が object になっていることがあります。これはデータ内に空白や文字が混ざっている場合に起こりやすく、astype(float) や astype(int) で変換を試みるとエラーで原因に気づけます。

複数列を一括で変換する

辞書を渡せば、複数列の型を一度に変換できます。

df = df.astype({
    "age": int,
    "score": int
})

列数が多いデータでは、1 列ずつ変換するよりもこの書き方のほうが見通しがよくなります。

to_numeric で安全に変換する

文字列が混ざっていて astype では変換できない場合は、pd.to_numeric を使う方法があります。

s = pd.Series(["1", "2", "three", "4"])
result = pd.to_numeric(s, errors="coerce")
print(result)

errors=“coerce” を指定すると、変換できない値は NaN に置き換えられます。errors=“raise”(デフォルト)ではエラーが発生し、errors=“ignore” では元の値がそのまま残ります。

astype

型が確実にわかっているときに使う。変換できない値があるとエラーになる

to_numeric

文字列が混在している可能性があるときに使う。errors 引数で挙動を制御できる

データの読み込み直後に dtypes を確認し、必要な変換を済ませておく習慣をつけると、あとの分析工程でトラブルを防げます。特に CSV から読み込んだデータは型が自動推定されるため、想定と異なる型になっていないか注意しましょう。