2016-05-25 19 views
-2

Ich versuche, meinen NaN-Wert in meinem DataFrame zu ersetzen. Ich möchte 60% des NaN durch einen Wert und 40% durch einen anderen ersetzen. Ich lese die Dokumentation der Fillna-Methode, aber ich finde nicht.Pandas - Ersetze NaN durch zwei verschiedene Werte

Irgendeine Idee?

Dank

+1

immer versuchen, eine zu schaffen [Minimal, vollständig und prüfbare Beispiel] (http://stackoverflow.com/help/mcve), wenn Fragen zu stellen. Im Falle von _pandas_ Fragen geben Sie bitte Beispiel _input_ und _output_ data sets (5-7 Zeilen im CSV/dict/JSON/Python-Code-Format _als Text_, so könnte man es verwenden, wenn Sie eine Antwort für Sie kodieren). Dies wird dazu beitragen, _situations_ zu vermeiden: 'Ihr Code funktioniert nicht für mich' oder' es funktioniert nicht mit meinen Daten', etc. – MaxU

Antwort

1

eine boolean-Array erstellen, die eine Chance auf 60/40 True/False die gleiche Größe wie die df Sie Füllung hat. Dann nutzen combine_first

import pandas as pd 
import numpy as np 

df = pd.DataFrame(index=list('ABCDEFGHIJ'), columns=list('abcdefghij')) 

mask60 = np.random.rand(*df.shape) > 0.6 

value40, value60 = 10, 20 

fill = value60 * mask60 + value40 * (1 - mask60) 

fill = value40 + mask60 * (value60 - value40) 

fill_df = pd.DataFrame(fill, index=df.index, columns=df.columns) 

Sieht aus wie:

print df.combine_first(fill_df) 

    a b c d e f g h i j 
A 10 10 20 20 10 10 10 10 10 20 
B 10 10 10 10 10 20 20 10 10 10 
C 20 10 10 10 10 10 10 20 20 20 
D 10 10 10 20 10 10 20 10 10 10 
E 20 20 10 10 20 10 10 10 20 10 
F 10 20 10 10 20 10 20 10 10 20 
G 20 20 10 10 10 10 10 20 20 10 
H 10 10 20 20 10 10 10 10 10 10 
I 10 10 10 20 20 10 10 10 10 20 
J 10 10 10 20 10 10 20 10 10 10 
+0

Vielen Dank, es funktioniert gut. –

1

Sie es auf diese Weise tun können:

df.loc[your_condition_for_60%] = df.fillna(10) 
df.loc[your_condition_for_40%] = df.fillna(20) 
Verwandte Themen