2015-09-22 25 views
9

sto cercando di riempire i valori mancanti (NAN) usando il codice seguentePandas - NaNs Inserimento dei dati categoriali

NAN_SUBSTITUTION_VALUE = 1 
g = g.fillna(NAN_SUBSTITUTION_VALUE) 

ma sto ottenendo il seguente errore

ValueError: fill value must be in categories. 

mai qualcuno si prega di gettare un po ' luce su questo errore.

+0

Hai provato qualcosa? Hai cercato l'errore su internet? Senza dire quello che hai provato, è difficile aiutarti. Nessuno farà i compiti per te. – HackCode

+1

Devo segnalare questa domanda come "Non chiaro cosa stai chiedendo ..." http://stackoverflow.com/help/how-to-ask –

+0

'1' probabilmente non è nella categoria. – pacholik

risposta

2

Dopo aver creato Dati categorici, è possibile inserire solo i valori nella categoria.

>>> df 
    ID value 
0 0  20 
1 1  43 
2 2  45 

>>> df["cat"] = df["value"].astype("category") 
>>> df 
    ID value cat 
0 0  20  20 
1 1  43  43 
2 2  45  45 

>>> df.loc[1, "cat"] = np.nan 
>>> df 
    ID value cat 
0 0  20  20 
1 1  43 NaN 
2 2  45  45 

>>> df.fillna(1) 
ValueError: fill value must be in categories 
>>> df.fillna(43) 
    ID value cat 
0 0  20  20 
1 1  43  43 
2 2  45  45 
9

aggiungere la categoria prima di riempire:

g = g.cat.add_categories([1]) 
g.fillna(1) 
+0

Just a side tought: quando si utilizza direttamente applicato a un frame di dati, dovevo specificare la colonna affinché funzioni: 'g [cat_column_name] = g [cat_column_name] .cat.add_categories ([1])'. E la categoria aggiunta diventa la più grande se le categorie sono già ordinate. – Gaduks

3

La tua domanda non è presente il punto importante quello g è, soprattutto che ha DTYPE categorical. Suppongo che sia qualcosa di simile:

g = pd.Series(["A", "B", "C", np.nan], dtype="category") 

Il problema riscontrato è che fillna richiede un valore già esistente come categoria. Ad esempio, g.fillna("A") funzionerebbe, ma g.fillna("D") non riesce. Per riempire la serie con un nuovo valore puoi fare:

g_without_nan = g.cat.add_categories("D").fillna("D")