2017-10-08 12 views
0

DataFrameのテキストを含む列を1つのホットエンコードされた行列に変換しようとしています。これはしばらくの間うまく機能しましたが、私にはわからない理由で作業が中止されました。メッセージは: "TypeError: '>' str 'と' float 'のインスタンス間ではサポートされていません"私には、私はtekstデータのみを使用するのでナンセンスに思えます。私が小さなデータセットで実験を繰り返すと、LabelBinarizerはうまく動作し、望ましい出力を生成します。LabelBinarizerがNaNのために一貫して動作しない

X_trainデータフレームのサイズが4.6 GBであることに気付きました。私のマシンはわずか8 GBしかありません。私が知っておくべきいくつかのメモリ制限はありますか? int32とfloat32に変換する必要がありますすべての数値はかなり小さいですか?

以下のエラーを再現できます。しかし、これが十分な情報を提供するかどうかはわかりません。

from sklearn.preprocessing import LabelBinarizer 

lb=LabelBinarizer() 

s=['a','b','c','b','a'] 

df=pd.DataFrame (s) 

df = pd.Series (s) 

dd = X_train['state'] 

type(dd) 
Out[9]: pandas.core.series.Series 

type(df) 
Out[10]: pandas.core.series.Series 

lb.fit(dd) 
Traceback (most recent call last): 

    File "<ipython-input-11-5ec245111e31>", line 1, in <module> 
    lb.fit(dd) 

    File "C:\packages\Anaconda3\lib\site-packages\sklearn\preprocessing\label.py", line 296, in fit 
    self.y_type_ = type_of_target(y) 

    File "C:\packages\Anaconda3\lib\site-packages\sklearn\utils\multiclass.py", line 275, in type_of_target 
    if (len(np.unique(y)) > 2) or (y.ndim >= 2 and len(y[0]) > 1): 

    File "C:\packages\Anaconda3\lib\site-packages\numpy\lib\arraysetops.py", line 214, in unique 
    ar.sort() 

TypeError: '>' not supported between instances of 'str' and 'float' 


lb.fit(df) 
Out[12]: LabelBinarizer(neg_label=0, pos_label=1, sparse_output=False) 

df.value_counts() 
Out[13]: 
a 2 
b 2 
c 1 
dtype: int64 

dd.value_counts() 
Out[14]: 
MI 228601 
CA  5020 
TX  2420 
FL  2237 
IL  1310 
SC  1304 
OH  967 
NY  673 
MN  632 
GA  535 
NV  484 
UT  477 
PA  466 
NJ  395 
VA  385 
NC  353 
MD  349 
AZ  329 
ME  261 
OK  248 
AL  215 
TN  207 
WA  192 
MA  182 
IA  159 
WI  159 
OR  153 
MO  151 
CO  147 
KY  146 
IN  106 
AR  82 
LA  81 
AK  79 
UK  77 
NB  77 
MS  64 
CT  60 
DC  58 
ON  51 
DE  50 
KS  37 
RI  35 
SD  33 
ID  33 
MT  28 
NM  21 
BC  17 
WY  12 
HI  10 
NH   9 
VT   7 
VI   6 
WV   6 
PR   5 
QC   5 
QL   3 
ND   2 
BL   2 
Name: state, dtype: int64 

len(df) 
Out[15]: 5 

len(dd) 
Out[16]: 250306 

答えて

1

入力データに欠損値が含まれている可能性があります。

from sklearn.preprocessing import LabelBinarizer 
import numpy as np 
import pandas as pd 

lb = LabelBinarizer() 

s = ['a','b','c','b','a', np.nan] 
df = pd.DataFrame(s, columns=["state"]) 

df_binarized = lb.fit_transform(df['state']) 
df_binarized 

Traceback (most recent call last): 
    File "/home/kuroyanagi/.pyenv/versions/anaconda3-4.4.0/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 2881, in run_code 
    exec(code_obj, self.user_global_ns, self.user_ns) 
    File "<ipython-input-45-f16e01b4e1be>", line 4, in <module> 
    df_binarized = lb.fit_transform(df['state']) 
    File "/home/kuroyanagi/.pyenv/versions/anaconda3-4.4.0/lib/python3.6/site-packages/sklearn/base.py", line 494, in fit_transform 
    return self.fit(X, **fit_params).transform(X) 
    File "/home/kuroyanagi/.pyenv/versions/anaconda3-4.4.0/lib/python3.6/site-packages/sklearn/preprocessing/label.py", line 296, in fit 
    self.y_type_ = type_of_target(y) 
    File "/home/kuroyanagi/.pyenv/versions/anaconda3-4.4.0/lib/python3.6/site-packages/sklearn/utils/multiclass.py", line 275, in type_of_target 
    if (len(np.unique(y)) > 2) or (y.ndim >= 2 and len(y[0]) > 1): 
    File "/home/kuroyanagi/.pyenv/versions/anaconda3-4.4.0/lib/python3.6/site-packages/numpy/lib/arraysetops.py", line 210, in unique 
    return _unique1d(ar, return_index, return_inverse, return_counts) 
    File "/home/kuroyanagi/.pyenv/versions/anaconda3-4.4.0/lib/python3.6/site-packages/numpy/lib/arraysetops.py", line 277, in _unique1d 
ar.sort() 
TypeError: '<' not supported between instances of 'float' and 'str' 

欠損値がない場合、次のように動作します。

from sklearn.preprocessing import LabelBinarizer 
import numpy as np 
import pandas as pd 

s = ['a','b','c','b','a'] 
df = pd.DataFrame(s, columns=["state"]) 

df_binarized = lb.fit_transform(df['state']) 
df_binarized 

Out[46]: 
array([[1, 0, 0], 
     [0, 1, 0], 
     [0, 0, 1], 
     [0, 1, 0], 
     [1, 0, 0]]) 
+0

はい!それが原因でした。どうもありがとう。各値の型をテストするために私の列をスキャンし、浮動小数点数として解釈されたいくつかのNaNを気付きました。とても混乱するような。あなたがpandasシリーズのdtypeを尋ねるとき、それはあなたに横たわっているかもしれません。この発見を反映するようにタイトルを変更しました。 – Arnold

+1

タイトルを変更していただきありがとうございます。私も過去に同じ問題に遭遇しました。同じ問題を抱えている人にはおそらく便利です。 – Keiku

+0

このソリューションを共有して非常にうれしいです。エラーメッセージだけがより明確になっていれば、私には1日かかることはありませんでした。 – Arnold

関連する問題