Как преобразовать строку в число с плавающей точкой в ​​JavaScript?

Две вещи замедляют ваш код:

  1. Использование двух циклов for
  2. Использование .apply с вашей собственной определенной функцией.

Вы можете оптимизировать решение с помощью векторизованных методов pandas и numpys:

  1. np.where
  2. np.stack_columns
  3. pandas.DataFrame.iloc

Решение: (я не использовал ваш класс в этом случае)

# Print the DataFrame we start with provided by OP
print(df)
      DX1      DX2   DX3 DX4  HeartFailure
0   10R46   R*1005  8017   2             0
1   10R46  R*10335  5019   2             0
2  100R91   R*1005  8017   1             0
3   10R91    R*243  8870   1             0
4   10M95   R*4918  8305   3             0
5   10M95   R*9017  8305   3             0
6   10M95   R*9470  8221   3             0
# Create new optimized function
def defineComplicationsFeatures(df):

    col_to_update = 'HeartFailure'

    strings_to_search = ['80', 'R*1']

    for string in strings_to_search:
        mask = np.column_stack([df[col].str.startswith(string, na=False) for col in df.iloc[:, :-1]]).any(axis=1)
        df[col_to_update] = np.where(mask, 1, 0)

    return df

df_new = defineComplicationsFeatures(df)
print(df_new)

      DX1      DX2   DX3 DX4  HeartFailure
0   10R46   R*1005  8017   2             1
1   10R46  R*10335  5019   2             1
2  100R91   R*1005  8017   1             1
3   10R91    R*243  8870   1             0
4   10M95   R*4918  8305   3             0
5   10M95   R*9017  8305   3             0
6   10M95   R*9470  8221   3             0

Примечание Вы можете передавать col_to_update & amp; strings_to_search к аргументам функции, которая делает его немного чище, я выбрал не для простоты прямо сейчас.

242
задан Kamil Kiełczewski 22 April 2019 в 23:32
поделиться

2 ответа

Если они предназначены, чтобы быть отдельными значениями, попробуйте это:

var values = "554,20".split(",")
var v1 = parseFloat(values[0])
var v2 = parseFloat(values[1])

, Если они предназначены, чтобы быть единственным значением (как на французском языке, где половина записана 0,5)

var value = parseFloat("554,20".replace(",", "."));
349
ответ дан Jesse Rusak 23 November 2019 в 03:12
поделиться

Замените запятую точкой.

Это только возвратится 554:

var value = parseFloat("554,20")

Это возвратится 554.20:

var value = parseFloat("554.20")

Так в конце, можно просто использовать:

var fValue = parseFloat(document.getElementById("textfield").value.replace(",","."))

не забывают, что parseInt() должен только использоваться для парсинга целых чисел (никакие плавающие точки). В Вашем случае это только возвратится 554. Кроме того, вызов parseInt () на плавании не будет вокруг числа: это возьмет свой пол (самое близкое более низкое целое число).

<час>

Расширенный пример для ответа на вопрос Pedro Ferreira из комментариев:

, Если текстовое поле содержит тысячи точек разделителя как в 1.234.567,99, они могли бы быть устранены заранее с другим replace:

var fValue = parseFloat(document.getElementById("textfield").value.replace(/\./g,"").replace(",","."))
33
ответ дан mit 23 November 2019 в 03:12
поделиться
Другие вопросы по тегам:

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