Избавьтесь от & ldquo; E & rdquo ;? [Дубликат]

Подход 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

4
задан Michael Petrotta 11 September 2013 в 02:00
поделиться

5 ответов

Вы можете использовать toFixed() , но есть предел 20.

ex:

(4.65661287307739E-10).toFixed(20)
"0.00000000046566128731"

Но ...

(4.65661287307739E-30).toFixed(20)
"0.00000000000000000000"

Итак, если у вас всегда будет меньше 20 десятичных знаков, все будет в порядке. В противном случае, я думаю, вам, возможно, придется написать свой собственный.

8
ответ дан Gray 20 August 2018 в 07:45
поделиться

Ужасно примитивное преобразование, написанное с помощью 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"
2
ответ дан ibrahim tanyalcin 20 August 2018 в 07:45
поделиться

Вы можете отобразить строковое значение большого или малого десятичного знака:

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
*/
9
ответ дан kennebec 20 August 2018 в 07:45
поделиться
  • 1
    Благодарю вас. Как узнать, является ли число экспоненциальным числом? только если число экспоненциально, я бы использовал этот метод. – SharpCoder 10 September 2013 в 14:35
  • 2
    @B_D: если строковое значение числа не содержит e или E, возвращается число. – kennebec 10 September 2013 в 16:31
  • 3
    Ваше решение отлично работает, однако числа, такие как 9.52543977e3, висят в браузере. Возможно, это нужно оптимизировать. – Dilip Rajkumar 19 January 2015 в 07:21

В 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
-3
ответ дан Nandkumar Tekale 20 August 2018 в 07:45
поделиться

Расширяется от ответа @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);
  };

1
ответ дан Philip Kahn 20 August 2018 в 07:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: