1
votes

Ajout de zéros de fin aux valeurs de ligne pour s'assurer qu'il y a 10 chiffres

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


3 commentaires

Quel est le dtype de cette colonne?


Pourquoi les zéros de fin ont-ils été coupés?


Le dtype est une chaîne


4 Réponses :


8
votes

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')


0 commentaires

1
votes

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')


0 commentaires

1
votes

Vous pouvez utiliser ljust pour cela:

df = df['ID'].astype(str).str.ljust(10, '0')
print(df)

0    1234567689
1    1234567680
2    1234567600


0 commentaires

1
votes

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])


0 commentaires