sagantaf

メモレベルの技術記事を書くブログ。

pandas〜欠損値扱いの数値をNaNに変換する

-1や999など欠損値として格納されているデータをpandasのreplaceを使ってNaNに変換する方法を書く。


サンプルデータフレームの作成

まずはサンプルのために簡単なデータフレームを作成する。
欠損値は、-1, 999, 1000とする。

import pandas as pd

df = pd.DataFrame([[1,2,-1,4,5],[1000,5,6,999,8]],['a','b'])

dfは以下のようになる。

0 1 2 3 4
a 1 2 -1 4 5
b 1000 5 6 999 8



欠損値をNaNに変換する

pandasのreplaceメソッドを利用して変換できる。

df2 = df.replace([-1, 999, 1000], np.nan)

df2は以下のようになる。

0 1 2 3 4
a 1 2 NaN 4 5
b NaN 5 6 NaN 8

文法は
 df.replace(変換したい対象, 変換後のデータ)
と書き、変換したい対象はリストを指定することも可能。

他に例えば0に統一したい場合は、

df2 = df.replace([-1, 999, 1000], 0)

とするだけ。



元のデータフレームを変更してしまう

先ほどのようにdf2をわざわざ作成せずに、元のdfを書き換えてしまうにはオプションとしてreplaceをつけるだけ。

df.replace([-1, 999, 1000], np.nan, inplace=True)

これでdfが直接変換される。