Voici le look de ma DataFrame
:
StateAb GivenNm Nom de famille PartyNm PartyAb EluOrdre 35 WA Joe BULLOCK Parti travailliste australien ALP 2 36 WA Michaelia CASH LP libéral 3 37 WA Linda REYNOLDS Libéral LP 4 38 WA Wayne DROPULICH Parti des sports australien SPRT 5 39 WA Scott LUDLAM Les Verts (WA) GRN 6
et je veux énumérer une liste de sénateurs dont le nom de famille est plus de 9 caractères.
Donc, je pense que le code devrait être comme ça:
df[len(df.Surname) >9]
mais cela soulève une KeyError
, où est-ce que je me suis trompé?
La manière correcte de filtrer un DataFrame en fonction de la longueur des chaînes d'une colonne est
df[df['Surname'].str.len() > 9]
df['Surname'].str.len()
crée une série de longueurs pour la colonne du nom de famille et df[df['Surname'].str.len() > 9]
filtre les valeurs inférieures ou égales à 9. Ce que vous avez fait est de vérifier la longueur de la série elle-même (son nombre de lignes).
Jetez un coup d’œil à la fonction filter de python. Il fait exactement ce que tu veux.
df = [
{"Surname": "Bullock-ish"},
{"Surname": "Cash"},
{"Surname": "Reynolds"},
]
longnames = list(filter(lambda s: len(s["Surname"]) > 9, df))
print(longnames)
>>[{'Surname': 'Bullock-ish'}]
Sytse