У меня есть следующее dataframe
:
COL1 COL2 COL3 COL4
0 1.0 10 10 15000
1 2.0 1150 20 10020
2 3.0 1160 3035 10035
3 4.0 1117 2 10055
4 NaN 1131 50 10067
Я хочу удалить выброс, используя zscore.
Я попытался сделать это с помощью следующего кода строки:
df = df[(np.abs(stats.zscore(df, nan_policy='omit'))<1.8).all(axis=1)]
но я получаю предупреждение:
RuntimeWarning: invalid value encountered in less
df = df[(np.abs(stats.zscore(df, nan_policy='omit'))<1.8).all(axis=1)]
И результат:
COL1 COL2 COL3 COL4
1 2.0 1150 20 10020
3 4.0 1117 2 10055
Я запутался:
- Почему я получая предупреждение, если я установил
nan_policy='omit'
? - Я думал, что мой код сохранит строки: 1, 3, 4 Почему я не получил этот вывод? (Если мы игнорируем Nan?)
Полный код:
dict = {'COL1': [1, 2, 3, 4, np.nan],
'COL2': [10, 1150, 1160, 1117, 1131],
'COL3': [10, 20, 3035, 2, 50],
'COL4': [15000, 10020, 10035, 10055, 10067]}
df = pd.DataFrame(dict)
print(df.head())
zscore = np.abs(stats.zscore(df))
print(zscore)
df = df[(np.abs(stats.zscore(df, nan_policy='omit'))<1.8).all(axis=1)]
print(df)