Подход 1: вы можете использовать get_dummies в кадре данных pandas.
Пример 1:
import pandas as pd
s = pd.Series(list('abca'))
pd.get_dummies(s)
Out[]:
a b c
0 1.0 0.0 0.0
1 0.0 1.0 0.0
2 0.0 0.0 1.0
3 1.0 0.0 0.0
Пример 2:
Следующее преобразует заданный столбец в одну горячую. Использовать префикс, чтобы иметь несколько манекенов.
Подход 2: Использовать Scikit-learn
Учитывая набор данных с тремя функциями и четырьмя образцы, мы позволяем кодеру находить максимальное значение для каждой функции и преобразовывать данные в двоичную горячую кодировку.
>>> from sklearn.preprocessing import OneHotEncoder
>>> enc = OneHotEncoder()
>>> enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]])
OneHotEncoder(categorical_features='all', dtype=,
handle_unknown='error', n_values='auto', sparse=True)
>>> enc.n_values_
array([2, 3, 4])
>>> enc.feature_indices_
array([0, 2, 5, 9], dtype=int32)
>>> enc.transform([[0, 1, 1]]).toarray()
array([[ 1., 0., 0., 1., 0., 0., 1., 0., 0.]])
Вот ссылка для этого примера: http: // scikit -learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html
Вы можете использовать toFixed()
, но есть предел 20.
ex:
(4.65661287307739E-10).toFixed(20)
"0.00000000046566128731"
Но ...
(4.65661287307739E-30).toFixed(20)
"0.00000000000000000000"
Итак, если у вас всегда будет меньше 20 десятичных знаков, все будет в порядке. В противном случае, я думаю, вам, возможно, придется написать свой собственный.
Ужасно примитивное преобразование, написанное с помощью ES6:
function convert(n){
var [lead,decimal,pow] = n.toString().split(/e|\./);
return +pow <= 0
? "0." + "0".repeat(Math.abs(pow)-1) + lead + decimal
: lead + ( +pow >= decimal.length ? (decimal + "0".repeat(+pow-decimal.length)) : (decimal.slice(0,+pow)+"."+decimal.slice(+pow)))
}
var myvar = 4.951760157141521e+27;
var myvar2 = 4.951760157141521e-2;
convert(myvar);//"4951760157141521000000000000"
convert(myvar2);//"0.04951760157141521"
Вы можете отобразить строковое значение большого или малого десятичного знака:
Number.prototype.noExponents= function(){
var data= String(this).split(/[eE]/);
if(data.length== 1) return data[0];
var z= '', sign= this<0? '-':'',
str= data[0].replace('.', ''),
mag= Number(data[1])+ 1;
if(mag<0){
z= sign + '0.';
while(mag++) z += '0';
return z + str.replace(/^\-/,'');
}
mag -= str.length;
while(mag--) z += '0';
return str + z;
}
var n=4.65661287307739E-10 ;
n.noExponents()
/* returned value: (String)
0.000000000465661287307739
*/
В ExtJS вы можете использовать метод Ext.Number.toFixed(value, precision)
, который внутренне использует метод toFixed()
,
Например.
console.log(Ext.Number.toFixed(4.65661287307739E-10, 10));
// O/p => 0.0000000005
console.log(Ext.Number.toFixed(4.65661287307739E-10, 15));
// 0.000000000465661
Расширяется от ответа @kennebec, но обрабатывает случаи краев, которые он терпит неудачу лучше ( Gist, с CoffeeScript ):
String.prototype.noExponents = function(explicitNum) {
var data, leader, mag, multiplier, num, sign, str, z;
if (explicitNum == null) {
explicitNum = true;
}
/*
* Remove scientific notation from a number
*
* After
* http://stackoverflow.com/a/18719988/1877527
*/
data = this.split(/[eE]/);
if (data.length === 1) {
return data[0];
}
z = "";
sign = this.slice(0, 1) === "-" ? "-" : "";
str = data[0].replace(".", "");
mag = Number(data[1]) + 1;
if (mag <= 0) {
z = sign + "0.";
while (!(mag >= 0)) {
z += "0";
++mag;
}
num = z + str.replace(/^\-/, "");
if (explicitNum) {
return parseFloat(num);
} else {
return num;
}
}
if (str.length <= mag) {
mag -= str.length;
while (!(mag <= 0)) {
z += 0;
--mag;
}
num = str + z;
if (explicitNum) {
return parseFloat(num);
} else {
return num;
}
} else {
leader = parseFloat(data[0]);
multiplier = Math.pow(10, parseInt(data[1]));
return leader * multiplier;
}
};
Number.prototype.noExponents = function() {
var strVal;
strVal = String(this);
return strVal.noExponents(true);
};