Функция Numpy «где» ведет себя неоднозначно - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь создать кадр данных pandas, который описывает процентное значение NULL для каждого объекта в моем наборе обучающих данных, а также дает коэффициент корреляции для каждого числового объекта по отношению к зависимой переменной.Вот мой код:

#Count nulls and compute share
null_cols = pd.DataFrame(train.isnull().sum().sort_values(ascending = False))
null_cols.columns = ['NullCount']
null_cols.index.name = 'Features'
null_cols['Share'] = np.round(100 * null_cols['NullCount'] / len(train), decimals=2)

#Compute correlation of each numeric feature with respect to the dependent variable
for row in null_cols.index:
    print(row, np.where(is_numeric_dtype(train[row]), str(train['Dependent Var'].corr(train[row])), ''))
    #print(row, np.where(is_numeric_dtype(train[row]), str(train[row].isnull().sum()), ''))

При выполнении этого я получаю TypeError: неподдерживаемые типы операндов для /: 'str' и 'int'.Я думаю, что эта ошибка исходит от функции corr, но почему она запускается в функции 'where' для нечислового типа данных.Разве это не должно попасть в остальное?

Закомментированная строка кода, т. Е.

print(row, np.where(is_numeric_dtype(train[row]),str(train[row].isnull().sum()),'')) 

, работает без ошибок, а функция 'where' работает, как и ожидалось.

1 Ответ

0 голосов
/ 18 февраля 2019

Давайте рассмотрим, как Python выполняет этот код:

np.where(is_numeric_dtype(train[row]), str(train['Dependent Var'].corr(train[row])), '')

where - это функция.Python оценивает все аргументы функции перед передачей их в функцию.Таким образом, он оценивает:

is_numeric_dtype(train[row])
str(train['Dependent Var'].corr(train[row]))
''

перед вызовом where.

Если вы можете запускать corr только для определенных типов значений, np.where не является инструментом для использования.Я думаю, что вам нужно:

for row in null_cols.index:
    if is_numeric_dtype(train[row]):
        print(row, str(train['Dependent Var'].corr(train[row])))
    else:
        print('')
...