Should we normalize before using VarianceThreshold in sklearn? I am trying to remove features with low variance using VarianceThreshold 
It seems to me that we should normalize the data before calculating variance, but somehow VarianceThreshold is not doing it automatically. Thoughts ?
 A: Yes, one must do normalization before using VarianceThreshold. This is necessary to bring all the features to same scale. Other wise the variance estimates can be misleading between higher value features and lower value features. By default, it is not included in the function. One must do it using MinMaxScaler or StandardScaler available in scikit-learn.
A: The features must have the same units, therefore scaling is necessary (for example reduce the range to [0,1] with the MinMaxScaler).
Standardize for example with StandardScaler, that means removing the mean and scaling to unit variance, is wrong because of course each feature will have variance 1.
A: I created an issue to request the documentation be clarified.  This is the response:

Normalized and unnormalized data have valid uses cases in VarianceThreshold:

*

*If you only want to use VarianceThreshold to remove constant features        then threshold=0 works regardless if the data was normalized.

*If you want the threshold have the same meaning for features, then
normalizing makes sense.

The example in the docstring is showcasing Use Case 1...
Source: https://github.com/scikit-learn/scikit-learn/issues/23394

I believe the second point is that a non-zero threshold only really makes sense if the features have been normalised (so they have the same scale) as stated by prashanth
