#概要
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[行,列]を使いました。
直接列ごと挿入できないのは残念ですが、この方法で対処できるのでぜひ参考にしてみてください。