Función que he creado:
#Create a function that identifies blank values def GPID_blank(df, variable): df = df.loc[df['GPID'] == variable] return dfPrueba:
variable = '' test = GPID_blank(df, variable) testObjetivo: crear una función que pueda filtrar cualquier columna de marco de datos 'GPID' para ver todas las filas donde GPID tiene datos faltantes.
He intentado ejecutar variable = 'NaN' y todavía no tuve suerte. Sin embargo, sé que la función funciona, como si usara una variable de la vida real "OH82CD85", la función filtra mi conjunto de datos en consecuencia.
Por lo tanto, ¿por qué no filtra la variable = 'NaN' ? Sé que para mi conjunto de datos, hay 5 filas con datos faltantes de GPID.
Ejemplo DF:
df = pd.DataFrame({'Client': ['A','B','C'], 'GPID':['BRUNS2','OH82CD85','']}) Client GPID 0 A BRUNS2 1 B OH82CD85 2 CMuestra de la columna GPID:
0 OH82CD85 1 BW07TI20 2 OW36HW81 3 PE56TA73 4 CT46SX81 5 OD79AU80 6 GF46DB60 7 OL07ST01 8 VP38SM57 9 AH90AE61 10 PG86KO78 11 NaN 12 NaN 13 SO21GR72 14 DY85IN90 15 KW80CV02 16 CM15QP83 17 VC38FP82 18 DA36RX05 19 DD74HD38No puedes usar == con NaN. NaN != NaN .
En cambio, puede modificar un poco su función para verificar si el parámetro es NaN usando pd.isna() (o np.isnan() ):
def GPID_blank(df, variable): if pd.isna(variable): return df.loc[df['GPID'].isna()] else: return df.loc[df['GPID'] == variable]Realmente no puede buscar valores de NaN como una expresión. Además, en su marco de datos de ejemplo, '' no es NaN , sino str , y se puede buscar como una expresión.
En su lugar, debe verificar cuándo desea filtrar por NaN y filtrar de manera diferente:
def GPID_blank(df, variable): if pd.isna(variable): df = df.loc[df['GPID'].isna()] else: df = df.loc[df['GPID'] == variable] return dfNo funciona porque con variable = 'NaN' está buscando una cadena cuyo contenido sea 'NaN', no valores faltantes.
Puedes probar:
import pandas as pd def GPID_blank(df): # filtered dataframe with NaN values in GPID column blanks = df[df['GPID'].isnull()].copy() return blanks filtered_df = GPID_blank(df)