from sklearn.preprocessing import OneHotEncoder import random all_data=pd.read_csv('./all_data.csv',dtype=object,encoding='SHIFT-JIS') all_data['馬体重']=all_data['馬体重'].astype(int) # 馬体重のみをint型にする。 all_data.dropna(inplace=True) # NaNを含む列を削除 X=all_data.loc[:,'枠':'条件'] y=all_data.loc[:,'上位以内'] X_train,X_test,y_train,y_test=separate_train_to_test(X,y) # X,yを3:1の割合で分ける関数 # X_trainは、DataFrameに渡してある。 X_header=X_train.columns.values judge_str=[type(s)==type('object') for s in X_train.loc[random.randint(0,len(X_train)),:]] col_str=[s for s,bl in zip(X_header,judge_str) if bl] # データ値が文字(object)であるもののヘッダーを取得 col_num=[s for s,bl in zip(X_header,judge_str) if not bl] # データ値が数値であるもののヘッダーを取得(ここでは'馬体重'ヘッダーのみが該当) # カテゴリ変数のダミー化 ohe=OneHotEncoder(handle_unknown='ignore',sparse=False) X_train_trans=ohe.fit_transform(X_train[col_str]) # カテゴリー変数のみダミー化 col_str_class=[cls for ary in ohe.categories_ for cls in ary] # ダミー化したもののヘッダー # ダミー変数と連続値の結合(訓練データ) af_X_train_trans=DataFrame(X_train_trans,columns=col_str_class) af_X_train_trans[col_num]=X_train[col_num] # 訓練データを参照しカテゴリ変数のダミー変数の生成と、その結合(テストデータ) X_test_trans=ohe.transform(X_test[col_str]) af_X_test_trans=DataFrame(X_test_trans,columns=col_str_class) af_X_test_trans[col_num]=X_test[col_num] # 確認 print(f'axis=0:{X_train[col_num].isnull().any(axis=0)}') # axis=0:馬体重 False for i,s in enumerate(X_train[col_num].isnull().any(axis=1)): if s: print(i) # なにも表示されないため該当なし print('-'*20) find_NaN=af_X_train_trans.isnull().any(axis=0) for i,s in enumerate(find_NaN): if s: print(i) # 4120 # これは結合した'馬体重'の列 find_NaN=af_X_train_trans.isnull().any(axis=1) for i,s in enumerate(find_NaN): if s: print(i) print(af_X_train_trans['馬体重'][i]) ''' 5041 nan 5042 nan 5043 nan 5044 nan 5045 nan 5046 nan 5047 nan 5048 nan 5049 nan 5050 nan 5051 nan 5052 nan 5053 nan 5054 nan 5055 nan 5056 nan ''' print(af_X_train_trans['馬体重'].shape) # (8194,) print(af_X_train_trans.shape) # (8194, 4121)
OneHotEncoderを用いて、dropna()を用いてNaNを省いた訓練データXを最初にカテゴリー変数と連続値に分け、カテゴリー変数のみをダミー化した後に連続値と結合させる処理を施しました。ですが、ダミー化したカテゴリー変数単体と連続値にはNaNが含まれていないのに、それらを結合させると'馬体重'にNaNが発生してしまいます。
助言をお願いします。
回答1件
あなたの回答
tips
プレビュー