前提・実現したいこと
以下の画像のような、str型とint型、float型のデータが混ざったdataframeをLabel Encodingしたいと考えています。
'NAME_INCOME_TYPE' という列には欠損値が含まれています。
発生している問題・エラーメッセージ
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) ~/anaconda3/lib/python3.8/site-packages/sklearn/preprocessing/_label.py in _encode(values, uniques, encode, check_unknown) 112 try: --> 113 res = _encode_python(values, uniques, encode) 114 except TypeError: ~/anaconda3/lib/python3.8/site-packages/sklearn/preprocessing/_label.py in _encode_python(values, uniques, encode) 60 if uniques is None: ---> 61 uniques = sorted(set(values)) 62 uniques = np.array(uniques, dtype=values.dtype) TypeError: '<' not supported between instances of 'float' and 'str' During handling of the above exception, another exception occurred: TypeError Traceback (most recent call last) <ipython-input-36-ad9d13d097b0> in <module> 5 for c in cat_cols: 6 le = LabelEncoder() ----> 7 le.fit(df[c]) 8 df[c] = le.transform(df[c]) 9 ~/anaconda3/lib/python3.8/site-packages/sklearn/preprocessing/_label.py in fit(self, y) 238 """ 239 y = column_or_1d(y, warn=True) --> 240 self.classes_ = _encode(y) 241 return self 242 ~/anaconda3/lib/python3.8/site-packages/sklearn/preprocessing/_label.py in _encode(values, uniques, encode, check_unknown) 115 types = sorted(t.__qualname__ 116 for t in set(type(v) for v in values)) --> 117 raise TypeError("Encoders require their input to be uniformly " 118 f"strings or numbers. Got {types}") 119 return res TypeError: Encoders require their input to be uniformly strings or numbers. Got ['float', 'str']
該当のソースコード
py
1cat_cols = ['NAME_CONTRACT_TYPE','CODE_GENDER', 'NAME_INCOME_TYPE', 'FLAG_OWN_CAR'] 2 3from sklearn.preprocessing import LabelEncoder 4 5for c in cat_cols: 6 le = LabelEncoder() 7 le.fit(df[c]) 8 df[c] = le.transform(df[c]) 9 10df.head()
試したこと
cat_cols = ['NAME_CONTRACT_TYPE','CODE_GENDER', 'NAME_INCOME_TYPE']
のときはエラーが発生しますが、cat_cols = ['NAME_CONTRACT_TYPE','CODE_GENDER']
のときはエラーが発生しないため'NAME_INCOME_TYPE'に欠損値が存在することが原因と考えているのですが、どう対処したらいいかわかりません。
よろしくおねがいします。