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" では元の値がそのまま残ります。
型が確実にわかっているときに使う。変換できない値があるとエラーになる
文字列が混在している可能性があるときに使う。errors 引数で挙動を制御できる
データの読み込み直後に dtypes を確認し、必要な変換を済ませておく習慣をつけると、あとの分析工程でトラブルを防げます。特に CSV から読み込んだデータは型が自動推定されるため、想定と異なる型になっていないか注意しましょう。