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