2016-03-26 30 views
-1

我想解決kaggle泰坦尼克號災難問題,具體使用mode/mean/median來輸入缺失值。這裏是我的數據集的一個高峯Python 3. +,Scipy統計模式函數給出類型錯誤無法訂購的類型:str()> float()

Parch   Ticket  Fare Cabin Embarked 
0  0   A/5 21171 7.2500 NaN  S 
1  0   PC 17599 71.2833 C85  C 
2  0 STON/O2. 3101282 7.9250 NaN  S 
3  0   113803 53.1000 C123  S 
4  0   373450 8.0500 NaN  S 

我想獲得'進入'列的模式並鍵入'對象'。我正在使用python3。以下是代碼片段:

modeEmbarked = mode(df.Embarked) 

以下是錯誤片段:

<ipython-input-39-1b4237d65022> in clean(df) 
    18 
    19  # Cleaning Embarked column 
---> 20  modeEmbarked = mode(df.Embarked) 
    21 #  print(mode(df.Embarked)) 
    22 #  le_embarked = preprocessing.LabelEncoder() 

/home/singhaniya/anaconda3/lib/python3.5/site-packages/scipy/stats/stats.py in mode(a, axis) 
    635  return np.array([]), np.array([]) 
    636 
--> 637  scores = np.unique(np.ravel(a))  # get ALL unique values 
    638  testshape = list(a.shape) 
    639  testshape[axis] = 1 

/home/singhaniya/anaconda3/lib/python3.5/site-packages/numpy/lib/arraysetops.py in unique(ar, return_index, return_inverse, return_counts) 
    196   aux = ar[perm] 
    197  else: 
--> 198   ar.sort() 
    199   aux = ar 
    200  flag = np.concatenate(([True], aux[1:] != aux[:-1])) 

TypeError: unorderable types: str() > float() 

回答

2
modeEmbarked = mode(df.Embarked.dropna()) 

使用

modeEmbarked = mode(df.Embarked) 

這insetead解決了這個問題。

1

這是因爲你在df.Embarked混合類型。確保所有項目都是相同的類型(或可以比較的類型)。

或使用Series.mode(),它可以處理混合類型。

+0

是的!有NAN值,但我正在使用的教程沒有做任何額外的事情併產生相同的結果! 但是我可以這樣做,如果我運行它與dropna() – aks

+1

@AnkitSinghaniya不管你的教程說什麼,'scipy.stats.mode()'不能計算混合類型的數組模式,至少安裝scipy的版本在我的電腦裏。 'mode()'的熊貓版本可以做到這一點,請參閱我的編輯。 – Goyo

+0

你是對的,指出混合價值。我認爲NAN值是問題所在。 – aks

相關問題