Панды заменяют значения NaN наугад - PullRequest
1 голос
/ 13 марта 2019

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

Например, когда 20% переменной x отсутствуетТочность модели снижается на определенный%.Для этого я хотел бы смоделировать отсутствующие данные, заменив 20% строк в столбце данных.

Существует ли способ сделать это?

, начиная с df:

d = {'var1': [1, 2, 3, 4], 'var2': [5, 6, 7, 8]}
df = pd.DataFrame(data=d)
df
    var1   var2
0     1     5
1     2     6
2     3     7
3     4     8

конечный результат: случайное падение 50% столбца 'var1'

df
    var1   var2
0    nan    5
1     2     6
2    nan    7
3     4     8

Ответы [ 3 ]

4 голосов
/ 13 марта 2019

Переназначение с использованием метода sample, и pandas введет NaN значения из-за автоматического выравнивания:

df['var1'] = df['var1'].sample(frac=0.5)

Интерактивно:

In [1]: import pandas as pd
   ...: d = {'var1': [1, 2, 3, 4], 'var2': [5, 6, 7, 8]}
   ...: df = pd.DataFrame(data=d)
   ...: df
   ...:
Out[1]:
   var1  var2
0     1     5
1     2     6
2     3     7
3     4     8

In [2]: df['var1'] = df['var1'].sample(frac=0.5)

In [3]: df
Out[3]:
   var1  var2
0   1.0     5
1   NaN     6
2   3.0     7
3   NaN     8
1 голос
/ 13 марта 2019

(Примечание: я создал это до того, как вы опубликовали свой mcve. Я могу отредактировать его, включив в него ваш начальный код.)

Вот решение:

import pandas as pd
import numpy as np

df = pd.DataFrame({'x': np.random.random(20)})

length = len(df)
num = int(0.2*length)
idx_replace = np.random.randint(0, length-1, num)

df.loc[idx_replace, 'x'] = np.nan

print(df)

Вывод:

           x
0   0.426642
1        NaN
2        NaN
3   0.869367
4   0.719778
5        NaN
6   0.944411
7   0.424733
8   0.246545
9   0.344444
10  0.810131
11  0.735028
12       NaN
13  0.707681
14  0.963711
15  0.420725
16  0.787127
17  0.618693
18  0.606222
19  0.022355
0 голосов
/ 13 марта 2019

https://chartio.com/resources/tutorials/how-to-check-if-any-value-is-nan-in-a-pandas-dataframe/

перейти к «Подсчет пропущенных значений в кадре данных»
df.isnull (). Sum (). Sum ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...