Pythonで表形式のデータを扱うのに便利なpandas。
データを扱っていると中には欠損値 None
を含むデータもある。
しかし場合によっては特定のカラムに None
を含むデータを除外したいこともあるだろう。
ではどうやって None
を除外すれば良いのか。
そこで今回はpandasのDataFrameでNoneを含むをデータを除く方法について紹介する。
この記事を書いている人
記事を読むメリット
pandasのDataFrameでNoneを含むをデータを除く方法がわかる
pandasでNoneを含むをデータを除く方法
pandasでNoneを含むをデータを除くには dropna()
を用いる。
dropna()
は名前の通り、欠損値 None
を含むデータを削除(drop)する為の機能。
使い方としては以下のように用いる。
import pandas as pd data_list1 = [ [1,2,None], [2,None,4], [None,4,5], [4,5,6] ] col_list1 = ["c1","c2","c3"] df1 = pd.DataFrame(data=data_list1, columns=col_list1) print(df1) # c1 c2 c3 # 0 1.0 2.0 NaN # 1 2.0 NaN 4.0 # 2 NaN 4.0 5.0 # 3 4.0 5.0 6.0 df2 = df1.dropna() print(df2) # c1 c2 c3 # 3 4.0 5.0 6.0
dropna()
をすることで None
を持たない行だけが抽出された。
では特殊な条件を指定するにはどうしたらいいだろうか。
特定のカラムにNoneを含むをデータを除く方法
dropna()
をすることでデータのどこか1つのカラムに None
を持つ行を削除して、欠損の無い行だけ抽出できた。
では None
の有無チェックを特定のカラムのみにするにはどうすればいいのか。
カラムを指定する場合は subset
を用いる。
subset
にNoneチェックしたいカラム名をリスト形式で指定すると以下のようになる。
df3 = df1.dropna(subset=["c1","c2"]) print(df3) # c1 c2 c3 # 0 1.0 2.0 NaN # 3 4.0 5.0 6.0
全ての値がNoneの行のみ削除する方法
ではどれか1つのカラムに、ではなく全てのカラムにNoneを持つ行のみ削除するにはどうしたらよいのか。
その場合は how="all"
を指定する。
how="all"
を指定すると全ての値がNoneの行のみ除外されたDataFrameが得られる。
data_list1 = [ [1,2,None], [2,None,4], [None,None,None], [4,5,6] ] col_list1 = ["c1","c2","c3"] df1 = pd.DataFrame(data=data_list1, columns=col_list1) print(df1) # c1 c2 c3 # 0 1.0 2.0 NaN # 1 2.0 NaN 4.0 # 2 NaN NaN NaN # 3 4.0 5.0 6.0 df2 = df1.dropna() print(df2) # c1 c2 c3 # 3 4.0 5.0 6.0 df4 = df1.dropna(how="all") print(df4) # c1 c2 c3 # 0 1.0 2.0 NaN # 1 2.0 NaN 4.0 # 3 4.0 5.0 6.0
Noneを含む列を除外する方法
これまでは dropna()
でNoneを含む行を除外してきた。
では行ではなく列(カラム)を除外するにはどうしたらいいのか。
列(カラム)の除外には axis=1
を指定する。
data_list1 = [ [1,2,None], [2,None,4], [3,4,5], [4,5,6] ] col_list1 = ["c1","c2","c3"] df1 = pd.DataFrame(data=data_list1, columns=col_list1) print(df1) # c1 c2 c3 # 0 1.0 2.0 NaN # 1 2.0 NaN 4.0 # 2 3.0 4.0 5.0 # 3 4.0 5.0 6.0 df5 = df1.dropna(axis=1) print(df5) # c1 # 0 1 # 1 2 # 2 3 # 3 4
axis=1
を指定することでNoneを含む列が除外された。
まとめ
今回はpandasのDataFrameでNoneを含むをデータを除く方法について紹介した。
Noneを含むをデータを除くには dropna()
を用いる。
そして除外の方法を変えるには以下のようにパラメータを指定する。
Noneを除外する方法
subset=["カラム名"]
how="all"
axis=1
今回のようなPythonを使ったスクリプト。
一度きりの計算であれば手元で処理を実行すればよいが、もし定期的に処理を実行しようと思うと開発マシンとは別に実行環境を用意する必要がある。
クラウド環境を使う方法もあるが、安価な小型マシンを用意するとランニングコストが抑えられるので検討すると良いかも知れない。
あわせて読みたい