0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

欠損値(NaN)がある列を列ごと置換したいとき

Posted at

#概要
NaNの入っている列を抽出と書いてある記事はあるのですが、具体的に列ごと取ってきたり、その列をほかのリストで埋めたりしているものがなかったので今回まとめてみました。
解説に関しては初学者のため、あまり参考にならないかもしれませんが、こういう手法もあるんだ程度で見ていただければ幸いです。

#NaNが含まれているかの判定

行のどこかにNaNが含まれていた時、Trueを返すコードは以下の通りです。1行すべてNaNの時だけTrueを返してほしかったらanyをallに変えればよいです。
今回用意したデータでは2行目だけがNaNを含んでいます。

df_judge = df.isnull().any(axis=1)

"""
0     False
1     False
2      True
3     False
4     False
5     False
6     False
7     False
8     False
9     False
"""

#NaNの存在する列にリストを挿入する
まずTrueが存在するかはif文で調べることができ、リストの要素呼び出しとほぼ同じでした。

    for i in range(len(df)):
        if df_judge[i] == True:
            for j in range(len(df.columns)):
                #round処理は小数第1位にそろえる処理
                df.iloc[i,j] = average_list[j]

今回はNaNがある列にその他の列の平均値を挿入するのが目的でした。
列数、行数はlen(df),len(df.columns)で取得できるため、二重for文を使いました。if文でNaNがあると判定された後、指定の行に1つずつ列をずらして平均値を代入しています。DataFrameの要素を指定するときはdf.iloc[行,列]を使いました。
直接列ごと挿入できないのは残念ですが、この方法で対処できるのでぜひ参考にしてみてください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?