Nunca pensei nisso! Nem sabia que fosse possível.
só é necessário se atentar aos limites reais das colunas, de acordo com a quantidade de bits...
Por exemplo, não faz sentido usar float para idade, pode usar uint8 que tem 8 bits de limite, que é mais que suficiente!
O método é df.col=df.col.astype("uint8")
Pode-se usar loc tbm, ou como preferir