2017-03-21 6 views
2

フィーチャー選択を実装しようとしているデータフレームがあります。 整数型、浮動型、およびオブジェクト型の45個の列があります。ValueError:stringをfloatに変換できませんでした。Python

しかし、機能選択モデルは、投げ込みエラーが発生してから適合できません。

データフレームを私を助けてください:

member_id loan_amnt funded_amnt funded_amnt_inv term  batch_enrolled int_rate grade 
58189336 14350  14350  14350   36 months     19.19  E 
70011223 4800  4800  4800   36 months BAT1586599  10.99  B 

sub_grade emp_title emp_length home_ownership annual_inc verification_status pymnt_plan desc    purpose title  zip_code addr_state dti 
E3   clerk  9 years  OWN    28700  Source Verified  n   debt_consolidation Debt consolidation 349xx FL  33.88 
B4   HR   < 1 year MORTGAGE  65000  Source Verified  n   home_improvement Home improvement 209xx MD  3.64 

last_week_pay loan_status 
44th week   0 
9th week   1 

コード:

import numpy 
from pandas import read_csv 
from sklearn.decomposition import PCA 
# load data 
df = pd.read_csv("C:/Users/anagha/Documents/Python Scripts/train_indessa.csv") 
array = df.values 
X = array[:,0:44] 
Y = array[:,44] 
# feature extraction 
pca = PCA(n_components=3) 
fit = pca.fit(X) 

エラー:

Traceback (most recent call last): 

File "<ipython-input-8-20f3863fd66e>", line 2, in <module> 
fit = pca.fit(X) 

File "C:\Users\anagha\Anaconda3\lib\site- packages\sklearn\decomposition\pca.py", line 301, in fit 
self._fit(X) 

File "C:\Users\anagha\Anaconda3\lib\site-packages\sklearn\decomposition\pca.py", line 333, in _fit 
copy=self.copy) 

File "C:\Users\anagha\Anaconda3\lib\site-packages\sklearn\utils\validation.py", line 382, in check_array 
array = np.array(array, dtype=dtype, order=order, copy=copy) 

ValueError: could not convert string to float: '44th week' 

答えて

2

あなたは非数値データにPCAをフィットすることはできません。 PCAには行列の分解が含まれ、データの一部が数値ではないため、PCAを適用することはできません。したがって、PCAを進めるには、非数値の列を無視するか、数値の列に変換する必要があります。

+0

PCAでない場合は、数値以外のデータに何か他のものを使用できますか? 私はアプローチのlcoupleを試みましたが、すべてが非数値のために働くようです。 非数値データがあり、その上に機能選択を適用する方法を提案できます – Anagha

+0

「36ヶ月」のようなものを36に変換することから始めることができます。さらに、それらを数字にエンコードすることができます。 "desc"(可能なカテゴリが多数ある場合)のように、エンコードが難しい列を無視して、取得した結果が十分であるかどうかを確認してください。 –

+0

これらの列は私の予測にとって重要かもしれません。だから私は非数値データの機能選択を行うことができますか?それは常に数値である必要がありますか? – Anagha

2

「44週目」のような文字列を浮動小数点に変換することはできません。

実際に変換できる文字列の唯一の部分は44です。そうするために、私は排他的に数字を保持するために文字列を変更することをお勧めします。その後、簡単にSklearnフィットを適用します。次のコードは、np配列を浮動小数点に変換する準備をする方法を示します。

import numpy as np 
import pandas as pd 

data = np.array([['rows','col1','Col2','Col_withtext'], 
      ['Row1',1,2,'44th week'], 
      ['Row2',3,4,'the 30th week']]) 


df = pd.DataFrame(data=data[1:,1:], 
       index=data[1:,0], 
       columns=data[0,1:]) 

使用パンダは

array([['1', '2', '44 '], 
    ['3', '4', ' 30 ']], dtype=object) 

は、私はそれが行く方法を知ってみましょうプリントアウトする##テキスト

df['Col_withtext'].replace(to_replace="[a-zA-Z]", value='', 
regex=True, inplace=True) 

df.values 

を削除するに置き換えます!

関連する問題