It is quite common that data sets will contain missing values in them. Suppose we want to try to fill in the missing values. For this we have techniques such as single/multiple imputation and matrix completion methods.
In general, are matrix completion methods preferred to multiple imputation? Moreover, looking at Python I do not find any library that can perform multiple imputation/matrix completion. Is this because missing values are discarded most of the time?
Finally, suppose the missing data set is used for the purpose of machine learning. In this case should we be imputing separately on training/testing or impute on the whole data set then split into training/testing?