2016-03-26 7 views
-1

Я пытаюсь решить проблему катастрофического титанического конфликта, в частности, используя режим/среднее/медианное значение для ввода отсутствующих значений. Вот пик моих наборов данныхPython 3. + Функция Scipy Stats Mode дает Type Error unorderable types: 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 

Я пытаюсь получить режим Column «вставших» и тип «Object». Я использую 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()) 

с помощью этого insetead из

modeEmbarked = mode(df.Embarked) 

решает эту проблему.

1

Это потому, что вы перепутали типы в df.Embarked. Убедитесь, что все элементы одного типа (или типы, которые можно сравнить).

Или используйте Series.mode(), который может обрабатывать смешанные типы.

+0

Да! есть значения NAN, но учебник, с которым я работаю, не делает ничего лишнего и дает тот же результат! Однако я могу сделать то же самое, если я запустил его с помощью dropna() – aks

+1

@AnkitSinghaniya. Независимо от того, что говорится в вашем учебнике, 'scipy.stats.mode()' не может вычислять режимы массивов смешанных типов, по крайней мере, версия установленного scipy в моем компьютере. Версия pandas 'mode()' может сделать это, хотя, см. Мое редактирование. – Goyo

+0

вы были правы, указывая на смешанные значения. Я думаю, что проблема NAN была проблемой. – aks