Игнорировать пропущенные значения при генерации новой переменной

Это можно сделать в python с модулем regex . Что-то вроде:

import regex as re
pattern = re.compile(r'[\W_--[ ]]+')
cleanString = pattern.sub('', rawString)

Обычно вы устанавливаете модуль regex с помощью pip :

pip install regex

EDIT:

Модуль регулярных выражений имеет два варианта поведения: версия 0 и версия 1. Упорядочение (как указано выше) - это поведение версии 1. Требование pypi docs версии 1 является поведением по умолчанию, но вы можете обнаружить, что это не так. Вы можете проверить с помощью

import regex
if regex.DEFAULT_VERSION == regex.VERSION1:
  print("version 1")

Чтобы установить его в версию 1:

regex.DEFAULT_VERSION = regex.VERSION1

или использовать версию 1 в одном выражении:

pattern = re.compile(r'(?V1)[\W_--[ ]]+')

1
задан Pearly Spencer 23 February 2019 в 23:09
поделиться

1 ответ

Я собираюсь догадаться, что «игнорирование пропущенных значений» означает «трактовать их как нули». Если у вас есть другая идея, вы должны сделать это явно.

Это может быть

gen new_var = (cond(missing(X), 0, 3 * X) ///
+ cond(missing(Y), 0, 2 * Y) ///
+ cond(missing(Z), 0, 4 * Z)) / 7 

Давайте посмотрим на ваши решения и объясним, почему они все не правы в целом или обычно.

(cond(missing(X*3),., X) + cond(missing(Y*2),., Y))/7 

Достаточно отметить, что если верно, что X отсутствует, то cond() приводит к отсутствию, как тогда X * 3 также отсутствует. Такое же замечание относится к терминам, включающим Y и Z. Таким образом, вы заменяете все пропущенные значения пропущенными значениями, а это не усиление

!missing(X*3+Y*2+Z*4)/7

Учитывая информацию, что по крайней мере один из X Y Z всегда отсутствует, тогда это всегда оценивается как 0/7 или 0. Даже если бы X Y Z были все не пропущены, тогда он оценил бы до 1/7. Это далеко от суммы, которую вы хотите. missing() всегда дает 1 или 0, а его отрицание, таким образом, 0 или 1.

(max(X, Y, Z)/7) if missing(X , Y, Z) 

Максимум X, Y, Z будет правильным ответом, если и только если один из значений не пропущены, а два других отсутствуют. max() в максимально возможной степени игнорирует пропуски (хотя в других контекстах пропуски рассматриваются как произвольно большие положительные числа). [+1121]

0
ответ дан Nick Cox 23 February 2019 в 23:09
поделиться