2015-09-22 33 views
9

Tôi cố gắng để điền vào các giá trị thiếu (NAN) sử dụng mã dưới đâyPandas - điền Nans trong dữ liệu Categorical

NAN_SUBSTITUTION_VALUE = 1 
g = g.fillna(NAN_SUBSTITUTION_VALUE) 

nhưng tôi nhận được lỗi sau

ValueError: fill value must be in categories. 

ai có xin vui lòng ném một số ánh sáng trên lỗi này.

+0

Bạn đã thử gì chưa? Bạn đã tìm kiếm lỗi trên internet? Nếu không nói những gì bạn đã thử, thật khó để giúp bạn. Không ai sẽ làm bài tập về nhà cho bạn. – HackCode

+1

Tôi sẽ gắn cờ câu hỏi này là 'Không rõ bạn đang hỏi gì… 'http://stackoverflow.com/help/how-to-ask –

+0

' 1' có lẽ không có trong danh mục. – pacholik

Trả lời

2

Khi bạn tạo Dữ liệu danh mục, bạn chỉ có thể chèn các giá trị trong danh mục.

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

Thêm thể loại trước khi bạn điền:

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

Chỉ cần một mặt tought: khi sử dụng trực tiếp áp dụng cho một khung dữ liệu tôi đã phải xác định cột để cho nó hoạt động: 'g [cat_column_name] = g [cat_column_name] .cat.add_categories ([1])'. Và danh mục được thêm sẽ lớn nhất nếu các danh mục đã được đặt hàng. – Gaduks

3

câu hỏi của bạn thiếu điểm quan trọng gì g là, đặc biệt là nó có dtype categorical. Tôi cho rằng đó là một cái gì đó như thế này:

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

Vấn đề bạn đang gặp là fillna đòi hỏi một giá trị đã tồn tại như thể loại. Ví dụ: g.fillna("A") sẽ hoạt động nhưng g.fillna("D") không thành công. Để điền vào chuỗi video có giá trị mới, bạn có thể làm:

g_without_nan = g.cat.add_categories("D").fillna("D") 
Các vấn đề liên quan