usando len () en el dataframe de Pandas

Este es el aspecto de mi DataFrame :

    StateAb GivenNm Apellido PartyNm PartyAb ElectedOrder
 35 WA Joe BULLOCK Partido Laborista Australiano ALP 2
 36 WA Michaelia CASH Liberal LP 3
 37 WA Linda REYNOLDS Liberal LP 4
 38 WA Wayne DROPULICH Australian Sports Party SPRT 5
 39 WA Scott LUDLAM Los Verdes (WA) GRN 6

y quiero enumerar una lista de senadores cuyo apellido tiene más de 9 caracteres.

Así que creo que el código debería ser así:

 df[len(df.Surname) > 9] 

pero esto plantea un KeyError , ¿dónde me equivoqué?

La forma correcta de filtrar un DataFrame basado en la longitud de las cadenas en una columna es

 df[df['Surname'].str.len() > 9] 

df['Surname'].str.len() crea una serie de longitudes para la columna del apellido y df[df['Surname'].str.len() > 9] filtra las df[df['Surname'].str.len() > 9] menores o iguales a 9. Lo que hizo fue verificar la longitud de la Serie (cuántas filas tiene).

Echa un vistazo a la función de filtro de python. Hace exactamente lo que quieres.

 df = [ {"Surname": "Bullock-ish"}, {"Surname": "Cash"}, {"Surname": "Reynolds"}, ] longnames = list(filter(lambda s: len(s["Surname"]) > 9, df)) print(longnames) >>[{'Surname': 'Bullock-ish'}] 

Sytse