1
votes

Les pandas remplacent les valeurs par NaN au hasard

Je teste les performances d'un algorithme d'apprentissage automatique, en particulier la manière dont il gère les données manquantes et le type de dégradation des performances lorsque des variables sont manquantes.

Par exemple, lorsque 20% de la variable x manque la précision de la le modèle diminue d'un certain%. Pour ce faire, j'aimerais simuler les données manquantes en remplaçant 20% des lignes d'une colonne de dataframe.

Existe-t-il un moyen de le faire?

démarrage de df :

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

résultat final: déposer 50% de la colonne 'var1' au hasard

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


1 commentaires

veuillez fournir un mcve


3 Réponses :


0
votes

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

passez à "Compter les valeurs manquantes dans DataFrame"
df.isnull (). sum (). sum ()


1 commentaires

Cette réponse ne répond pas à ce que la question pose réellement. Nous remplaçons les valeurs aléatoires NaN , sans les additionner toutes.



1
votes

(Remarque: j'ai créé ceci avant de publier votre mcve. Je peux le modifier pour inclure votre code de départ.)

Voici une solution:

           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

Sortie :

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)


0 commentaires

5
votes

Réaffecter à l'aide de l ' exemple / code> , et les pandas introduiront des valeurs NaN en raison de l'alignement automatique:

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

De manière interactive:

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


0 commentaires