J'ai un df (data frame) en Python avec avec une variable postal_code qui a des codes postaux canadiens. Tous les codes postaux sont rassemblés dans une ligne telle que k1b6j2. Mais, pour que j'utilise le package 'pgeocode', j'ai besoin du code postal sous une forme standard qui est comme k1b 6j2 (il doit y avoir un espace entre le 3ème et 4ème caractère)

Alors, y a-t-il un moyen de remplacer tous les codes postaux par ceux modifiés dans le df?

Merci beaucoup, Ben

0
Benn 2 juin 2020 à 22:06

5 réponses

Meilleure réponse

Vous pouvez simplement redéfinir votre colonne dans le format que vous attendez:

import pandas as pd 
df = pd.DataFrame({'ID':[1,2,3,4],'postal_code':['k1b6j2','k1b6j3','k1b6j4','k1b6j5']}) ##Example dataset

   ID postal_code
0   1      k1b6j2
1   2      k1b6j3
2   3      k1b6j4
3   4      k1b6j5

Redéfinissez la colonne postal_code dans le format souhaité:

df['postal_code'] = df['postal_code'].astype(str)
df['postal_code'] = [(x[:3]+" "+x[3:]) for x in df['postal_code']]

Production:

   ID postal_code
0   1     k1b 6j2
1   2     k1b 6j3
2   3     k1b 6j4
3   4     k1b 6j5

Enfin par rapport à d'autres méthodes dans un dataframe de 100k de longueur:

df['postal_code'] = [(x[:3]+" "+x[3:]) for x in df['postal_code']] 
First method time:  0.08260965347290039
df['postal_code'] = df["postal_code"].str[:3] + " " + df["postal_code"].str[3:]
Second method time:  0.112518310546875
1
Celius Stingher 2 juin 2020 à 20:40

Appliquez ceci à tous les codes postaux dans le DF:

code_with_space = code_without_space[:3] + " " + code_without_space[3:]
0
Aziz Sonawalla 2 juin 2020 à 19:11

Dans les pandas, vous pouvez utiliser «appliquer» pour répondre à vos besoins.

df['postal_code'] = df['postal_code'].apply(lambda x:x[:3]+' '+x[-3:])
1
cutrain 2 juin 2020 à 19:25

Une autre façon de faire est d'utiliser le prise en charge des chaînes pandas qui a un tas de méthodes intéressantes pour travailler sur des chaînes telles que le découpage direct des colonnes de chaînes:

>>> import pandas as pd
>>> df = pd.DataFrame({"index": range(10), "code": ["k1b6j2"]*10})
>>> df["postal_code"] = df["code"].str[:3] + " " + df["code"].str[3:]
>>> df
   index    code postal_code
0      0  k1b6j2     k1b 6j2
1      1  k1b6j2     k1b 6j2
2      2  k1b6j2     k1b 6j2
3      3  k1b6j2     k1b 6j2
4      4  k1b6j2     k1b 6j2
5      5  k1b6j2     k1b 6j2
6      6  k1b6j2     k1b 6j2
7      7  k1b6j2     k1b 6j2
8      8  k1b6j2     k1b 6j2
9      9  k1b6j2     k1b 6j2
1
Michael Mitter 2 juin 2020 à 20:11

Que diriez-vous:

pcode = 'k1b6j2'
pcode = pcode[:3] + ' ' + pcode[3:]
0
bonfab 2 juin 2020 à 19:13