3
votes

Python Pandas Dataframe change le contenu en fonction de la longueur de la chaîne

J'ai un dataframe comme ci-dessous.

id
111111
123456
012345
000234
000012
987654

donc si vous regardez la ligne 3,4,5 la longueur des identifiants est inférieure à 6

id
111111
123456
12345
234
12
987654

Je veux le convertir en dessous (en gros, ajoutez des zéros à l'avant pour en faire une longueur de six)

df = pd.DataFrame([111111,123456,12345,234,12,987654],columns=['id'])


1 commentaires

Jetez peut-être un œil à stackoverflow.com/questions/134934/ …


3 Réponses :


0
votes

Vous devez changer le type de données en chaîne ou bien les zéros initiaux seront coupés. Voici ma solution. J'espère que cela aidera

df = pd.DataFrame([111111,123456,12345,234,12,987654],columns=['id'])
df = df.astype(str)
df['id'] = df['id'].apply(lambda x: x if len(x)==6 else '0'*(6-len(x))+x)

df:
id
111111
123456
012345
000234
000012
987654


1 commentaires

Merci Bhanu pour votre réponse. Vous répondez rapidement à ma question. donc 1 vote positif.



3
votes

Utilisation de

df.id.astype(str).str.pad(6,'left','0')
0    111111
1    123456
2    012345
3    000234
4    000012
5    987654
Name: id, dtype: object


2 commentaires

Très gentil de ta part.


@SandhyaThotakura yw: _ bonne année



3
votes

Essayez zfill , convertissez d'abord les entiers en chaîne dtype puis utilisez l'accesseur de chaîne puis zfill:

0    111111
1    123456
2    012345
3    000234
4    000012
5    987654
Name: id, dtype: object

Sortie:

df['id'].astype(str).str.zfill(6)


2 commentaires

Merci d'avoir répondu. Mais j'irai avec W-B car je pense que sa réponse est plus robuste. Merci de m'avoir appris le concept de zfill (int)


@SandhyaThotakura Bon codage!