Как заменить NaN на среднее значение столбца, только если в столбце меньше заданного количества NaN? - PullRequest
0 голосов
/ 04 февраля 2020

У меня довольно большой набор данных, с 200 строками и 6000+ столбцами.

Я уже знаю функцию Pandas для замены NaN средним значением каждого столбца:

df.fillna(df.mean())

Моя проблема в том, что я хочу использовать его только в тех столбцах, в которых общее количество NaN равно или меньше 3. Будем очень благодарны за любые подсказки или решения.

1 Ответ

1 голос
/ 04 февраля 2020

Должно работать следующее:

m = df.isna().sum(0).le(3)
df.loc[:,m] = df.loc[:,m].fillna(df.loc[:,m].mean(0))

Проверка на тестовом фрейме данных:

df = pd.DataFrame(np.random.choice([float('nan'), *range(3)], (10, 3)))

print(df)

   0    1    2
0  NaN  1.0  0.0
1  2.0  0.0  NaN
2  0.0  1.0  0.0
3  NaN  1.0  0.0
4  2.0  NaN  1.0
5  NaN  2.0  1.0
6  2.0  2.0  NaN
7  NaN  NaN  NaN
8  1.0  NaN  0.0
9  2.0  0.0  2.0

m = df.isna().sum(0).le(3)
df.loc[:,m] = df.loc[:,m].fillna(df.loc[:,m].mean(0))

print(df)

     0    1         2
0  NaN  1.0  0.000000
1  2.0  0.0  0.571429
2  0.0  1.0  0.000000
3  NaN  1.0  0.000000
4  2.0  1.0  1.000000
5  NaN  2.0  1.000000
6  2.0  2.0  0.571429
7  NaN  1.0  0.571429
8  1.0  1.0  0.000000
9  2.0  0.0  2.000000
...