pandas.DataFrameにおけるString型列をfloatやint形式に直したい時がある。欠損値がある場合でも、astype(float)
をすることによりfloat形式に変換することは可能だ。しかし、実データを扱う際には例外レコード(数値が入っているはずなのに記号が入っているなど)が紛れ込んでいることも多く、astype
変換ではできないことがある。
そんな時にはpandas.to_numeric
を使おう。
df["数値変更したい列"] = pd.to_numeric(df["数値変更したい列"], errors='coerce')
errosに対応するパラメータには3種類存在し、それぞれ以下の役割を持つ。
-
raise
:例外データがあることを表示し、エラーを返す -
coerce
:例外データ部分をNaNで返し、他の行は数値変換する -
ignore
:例外データがある場合には数値変換はせず、inputのDataFrameをそのまま返す
詳しくは公式のレファレンスを参照。
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.to_numeric.html
なお、convert_objects
による数値変換も存在するようだが、現在では非推奨になっている模様。
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.convert_objects.html