Charger sans se tromper de type
pd.read_excel(fichier, dtype=str) charge tout en texte et évite que pandas transforme un code postal 01000 en 1000 ou un numéro de commande en notation scientifique. Vous convertirez ensuite explicitement les colonnes utiles.
Normaliser les colonnes texte
df['ville'] = df['ville'].str.strip().str.title() supprime les espaces de début et de fin et harmonise la casse. C'est ce qui fait tomber de 400 à 120 le nombre de villes « distinctes » dans un fichier saisi à la main.
Supprimer les doublons intelligemment
drop_duplicates(subset=['email'], keep='last') conserve la dernière saisie, généralement la plus à jour. Sans subset, pandas compare toutes les colonnes et laisse passer les doublons partiels.
Réexporter proprement
df.to_excel('propre.xlsx', index=False) évite la colonne d'index parasite que tout le monde supprime ensuite à la main dans Excel.