2015-09-22 16 views
9

Staram się wypełnić brakujące wartości (NAN) stosując poniższy kodPandy - wypełnienie Koncepcja nieliczby w danych kategorycznych

NAN_SUBSTITUTION_VALUE = 1 
g = g.fillna(NAN_SUBSTITUTION_VALUE) 

ale otrzymuję następujący błąd

ValueError: fill value must be in categories. 

Czy ktoś proszę rzucić pewne światło na ten błąd.

+0

Czy próbowałeś czegoś? Czy szukałeś błędu w Internecie? Bez wypowiedzenia tego, co próbowałeś, trudno ci pomóc. Nikt nie odrobi twojej pracy domowej. – HackCode

+1

Oznaczę to pytanie jako "niejasne, o co prosisz". Http://stackoverflow.com/help/how-to-ask –

+0

'1' prawdopodobnie nie należy do kategorii. – pacholik

Odpowiedz

2

Po utworzeniu Kategorycznych danych można wstawiać tylko wartości w kategorii.

>>> 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

Dodaj kategorię zanim wypełnić:

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

Pomyślałem tylko o tym: kiedy używam bezpośrednio zastosowanego do ramki danych, musiałem określić kolumnę, aby działała: 'g [nazwa_kolumny] = g [nazwa_kolumny] .cat.add_categories ([1])'. A kategoria dodana jest największa, jeśli kategorie są już uporządkowane. – Gaduks

3

Twoje pytanie brakuje ważny punkt co g jest, zwłaszcza, że ​​ma dtype categorical. Zakładam, że jest coś takiego:

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

Problem doświadczasz jest fillna wymaga wartości już istniejącej jako kategorii. Na przykład zadziała g.fillna("A"), ale nie powiedzie się g.fillna("D"). Aby wypełnić serię nową wartością, możesz:

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