#python #pandas
Вопрос:
phoneinfo=np.array([['galaxy s8','android',64,4,140,'samsung',6],['lumia','windows',32,3,150,'microsoft',6],
['xperia l1','android',16,2,180,'sony',5],['iphone7','ios',128,2,138,'apple',4],
['u ultra','android',64,4,170,'htc',5],['galaxy s5','android',16,2,145,'samsung',5],
['iphone 5s','ios',32,1,112,'apple',4],['moto g5','android',16,3,144.7,'motorola',5],
['pixel','android',128,4,143,'google',5]])
phDF=pd.DataFrame(phoneinfo,index=[1,2,3,4,5,6,7,8,9],columns=['name','os','capacity','ram','weight','company','inch'])
np.median(phDF.ram)
Сообщение об ошибке:
TypeError: ufunc 'true_divide' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''
Комментарии:
1. какая ошибка ? Всегда публикуйте полное сообщение об ошибке, включая трассировку стека
2. @juanpa.arrivillaga, я понял это, запустив коды:
TypeError: ufunc 'true_divide' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''
3. да, это было то, что я пытался решить
Ответ №1:
Поскольку тип dtype вашего ram
столбца находится в object
типе, np.median
не может работать с ним.
phDF.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 9 entries, 1 to 9
Data columns (total 7 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 name 9 non-null object
1 os 9 non-null object
2 capacity 9 non-null object
3 ram 9 non-null object
4 weight 9 non-null object
5 company 9 non-null object
6 inch 9 non-null object
dtypes: object(7)
memory usage: 576.0 bytes
Вы можете сделать это одним из следующих способов:
Попробуйте Series.median()
вместо этого:
phDF.ram.median()
Или преобразуйте dtype в int
перед использованием np.median
:
np.median(phDF.ram.astype(int))
Или используйте pd.to_numeric()
для преобразования столбца сначала в числовой:
np.median(pd.to_numeric(phDF.ram))
Результат:
3.0