This post is also available in: English-US (英語)
機械学習を行う際に、簡易的に特徴量の欠損値の処理を行い、訓練データとテストデータの特徴量の数を合わせるサンプルコードについて、備忘録的にメモを書いています。
欠損値の処理は機械学習の方針にもよるので、とりあえずコードが走るようにしたい時などに便利です。
ただし、サンプルコード中、訓練データとテストデータの index は共通であることを前提に書いています。
import pandas as pd import numpy as np #適当なデータを生成、nanを代入 data_X = np.random.randn(6,2) data_X[0][1] = np.nan data_X[4][0] = np.nan print(data_X) """ #output [[ 0.1669884 nan] [-0.93169488 -0.80602492] [ 1.34485881 -1.15684329] [-1.77475068 0.58345764] [ nan -1.34413655] [ 0.76400682 0.43928072]] """ #データから特徴量のデータフレーム生成 train_features = pd.DataFrame(data_X, columns=["FeatureA","FeatureB"]) print(train_features) """ #output FeatureA FeatureB 0 0.166988 NaN 1 -0.931695 -0.806025 2 1.344859 -1.156843 3 -1.774751 0.583458 4 NaN -1.344137 5 0.764007 0.439281 """ #正解ラベルのシリーズを適当に生成 train_labels = pd.Series([1,0,1,1,0,1]) #特徴量の欠損値(nan)をDrop # how='any' は行の1つでも欠損値が含まれる場合は削除 train_features = train_features.dropna(how='any') #欠損値の処理で、train_features と train_labels のデータ数が合わなくなる print(len(train_features.index.values)) #4 print(len(train_labels.index.values)) #6 #train_features のデータ数に train_labels のデータ数を合わせる場合 #言い換えると、train_features のdropnaで欠損したインデックスに train_labels のインデックスを合わせる #ただし、train_features と train_labels の index は共通であることが必要 train_labels = train_labels[train_features.index.values] #train_features と train_labels のデータ数が一致 print(len(train_features.index.values)) #4 print(len(train_labels.index.values)) #4