#Num has too much unique values and we cant do simple imputation because each unique value has such a low count that setting all 72 nulls to that value will skew the results so we just randomly impute the nulls using the existing values
num_values = X_train['Num'].dropna().values
# Shuffle non-missing values multiple times
num_shuffled = num_values.copy() # Make a copy to shuffle multiple times
np.random.shuffle(num_shuffled)
num_shuffled=pd.Series(num_shuffled)
# Fill missing values with the shuffled values
X_train['Num']=X_train['Num'].fillna(num_shuffled)
The number of nulls decreased but did not go to zero even though there is a lot more values in num_shuffled then the number of nulls