Você deve dividir antes do pré-processamento ou imputação.
A divisão entre treinamento e conjunto de testes é uma tentativa de replicar a situação em que você possui informações passadas e está construindo um modelo que será testado em informações futuras ainda desconhecidas: o conjunto de treinamento substitui o passado e o conjunto de testes assume o lugar do futuro, para que você só teste seu modelo treinado uma vez.
Tendo em mente a analogia do passado / futuro, isso significa qualquer coisa que você faça para pré-processar ou processar seus dados, como imputar valores ausentes, que você deve fazer apenas no conjunto de treinamento. Você pode se lembrar do que fez no seu conjunto de treinamento se o seu conjunto de testes também precisar de pré-processamento ou imputação, para que você faça da mesma maneira nos dois conjuntos.
Adicionado a partir dos comentários: se você usar os dados de teste para afetar os dados de treinamento, os dados de teste serão usados para criar seu modelo, portanto, eles deixarão de ser dados de teste e não fornecerão um teste justo do seu modelo. Você corre o risco de se ajustar demais e foi para desencorajar isso que você separou os dados do teste em primeiro lugar