Si j'ai un bloc de données où le nombre maximal de chiffres dans chaque ligne est de 10 mais que certains ID sont inférieurs à 10 parce que les zéros de fin ont été coupés, comment ajouter des zéros de fin en python pour m'assurer qu'il y a 10 chiffres dans chacun ligne.
ID 1234567689 1234567680 1234567600
ID 1234567689 123456768 12345676
4 Réponses :
Vous pouvez utiliser str.pad () qui, je pense, fonctionne parfaitement pour ce scénario:
ID 0 1234567689 1 1234567680 2 1234567600
Dans le cas où le dtype de la colonne n'est pas une chaîne, vous pouvez d'abord la convertir:
df['ID'] = df['ID'].astype(str).str.pad(width=10,side='right',fillchar='0')
Sortie:
df['ID'] = df['ID'].str.pad(width=10,side='right',fillchar='0')
Une autre façon consiste à utiliser, Series.str.ljust :
ID 0 1234567689 1 1234567680 2 1234567600
Résultat:
df['ID'] = df['ID'].str.ljust(width=10, fillchar='0')
Vous pouvez utiliser ljust pour cela:
df = df['ID'].astype(str).str.ljust(10, '0') print(df) 0 1234567689 1 1234567680 2 1234567600
Je pense que le formatage f peut faire cela
df['ID'] = df['ID'].apply(lambda x: f'{x:0<9'}).astype(int)
Cela ne fonctionne qu'avec Python 3.6+. L'idée est d'obtenir la valeur et le pad gauche 9 zéros. Dans Pandas, vous pouvez faire ce qui suit pour conserver votre champ sous forme numérique
X = [1234567689, 12345, 123,]
print([f'{item:0<9}' for item in X])
Quel est le
dtypede cette colonne?Pourquoi les zéros de fin ont-ils été coupés?
Le dtype est une chaîne