2

sklearn の代入と Panda の Ffill を組み合わせて、欠損データを埋めたいと考えています。これは私のデータフレームですdf

FeatA  FeatB  FeatC  FeatD
  B      A      B      D
 NaN    NaN    NaN    NaN
  A      A      B       C
 NaN     A      A       A
 NaN     B      A       A

Ffill を使用NaNして、前の値のみを含む行 (行 2 など) を塗りつぶしたいと考えています。

行に含まれる の数が少ないNaN場合 (たとえば、少なくとも 1 つの値がある場合)、代入を使用して、行で最も頻繁に使用される値で NaN を埋めます。

String 値を整数に変換するために LabelEncoder を使用しています。これはアルファベット順です。A=0, B=1, C=2, D = 3. NaN が値 4 を取得することを確認するために、NaN を「Z」に変換します。data = df.fillna("Z")

次に、データを代入Zして、 の値が行で最も頻繁に使用される値で埋められる ようにします。imp = Imputer(missing_values=4, strategy= 'most_frequent', axis=1)

NaNだから、私は使用しているだけの行を埋めたいffill.

次に、LabelEncoder と代入を使用してNaN、行で最も頻繁に使用される値をその他に入力します。

のみを含む行を選択し、それらの行のみに関数をNaN適用できれば、他の Nan に代入を使用できます。ffillこれどうやってするの?

4

1 に答える 1

0

Nan最初に、以前の値を持つ唯一の行を複製し、次のように続行できます。

## Select rows containing all Nan values and replace them with the preceding values
In [2]: df.loc[df.isnull().all(axis=1), :] = df.ffill()    

In [3]: df.fillna('Z', inplace=True)

初期化LabelEncoderして実行fit:

In [4]: enc = LabelEncoder()

In [5]: enc.fit(np.unique(df.values))
Out[5]: LabelEncoder()

In [6]: df = df.apply(enc.transform)

列に沿って最も頻度の高い要素で欠損値を代入します。

In [7]: imp = Imputer(missing_values=4, strategy='most_frequent', axis=1)

In [8]: imp.fit_transform(df)
Out[8]: 
array([[ 1.,  0.,  1.,  3.],
       [ 1.,  0.,  1.,  3.],
       [ 0.,  0.,  1.,  2.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  1.,  0.,  0.]])
于 2016-08-16T10:34:08.237 に答える