J'ai un tel problème: DataFrame pour cela: http://sigmaquality.pl/wp-content/ uploads / 2019/03 / sample.csv
J'ai deux colonnes: code postal et code du pays. J'ai beaucoup de cellules nulles dans la colonne: code du pays.
Je sais que si le code postal a un masque XX-XXX , il s'agit du code polonais. Parce que je le sais, je peux remplir les cellules vides par le symbole: «PL». Je ne sais pas comment faire.
Comment utiliser la condition pour remplir les données?
5 Réponses :
Utilisez groupby et ffill () avec bfill ():
df.groupby('POSTAL_CD').apply(lambda x: x.ffill().bfill())
Unnamed: 0 POSTAL_CD COUNTRY
0 0.0 33-101 PL
1 1.0 277 32 CZ
2 2.0 72-010 PL
3 3.0 33-101 PL
4 4.0 7700 BE
5 5.0 72-010 PL
6 6.0 33-101 PL
7 7.0 10095 IT
8 8.0 33-101 PL
9 9.0 33-101 PL
Si vous voulez dire à propos de la chaîne bfill et ffill, vous devez postuler ici :-)
Ça a l'air mieux maintenant :-)
Vérifiez avec np.where avec str.contains
df['COUNTRY']=np.where(df['POSTAL_CD'].str.match(r'\d{2}-\d{3}')&df['COUNTRY'].isnull(),'PL',df['COUNTRY'])
Quand j'ai écrit ce code, j'ai considéré que vous aviez besoin d'un masque avec [deux chiffres] - [trois chiffres] pour les codes postaux, pas seulement avec un tiret à l'intérieur ou un champ non vide.
pré> XXX
Que diriez-vous d'utiliser l'indexeur loc comme indiqué ici .
df = pd.read_csv("sample.csv", sep=",", index_col=0)
df.loc[df["POSTAL_CD"].str.contains("-", na=False), "COUNTRY"] = "PL"