У меня есть фрейм данных, который состоит из числительных c и категориальных значений. Поэтому я делю числовые значения c и вменяю пропущенные значения
from pyspark.ml.feature import Imputer
imputer = Imputer(strategy='mean',inputCols=data.columns,
outputCols=["{}_imputed".format(c) for c in data.columns]
)
impdf = imputer.fit(data).transform(data)
import pandas as pd
import numpy as np
condition = lambda col: '_imputed' in col
new_df = impdf.select(*filter(condition, impdf.columns))
Я вменяю значения, используя «среднее». Затем я использую код ниже, чтобы увидеть, есть ли все еще нулевые значения
from pyspark.sql.functions import isnan, when, count, col
new_df.select([count(when(col(c).isNull(), c)).alias(c) for c in new_df.columns]).show(truncate = False, vertical = True)
Столбцы отображаются с 0, что означает, что пропущенных значений нет
Тем не менее, когда я вычисляю корреляцию, я получаю Значения NaN
corr_matrix = numeric_data.corr().abs()
# Select upper triangle of correlation matrix
upper = corr_matrix.where(np.triu(np.ones(corr_matrix.shape), k=1).astype(np.bool))
Что вызывает проблему