Tengo un marco de datos y quiero devolver un subconjunto (copia nueva no referencia) de este marco de datos para realizar algunas operaciones. Sin embargo, no puedo filtrar los criterios que necesito.

Necesito estos tres criterios para archivar:

1. df['A'] != NaN
2. df['B'] == 'X' | df['B'] == NaN
3. df['C'] == NaN

Actualmente estoy haciendo esto para el criterio 1, pero estoy un poco atascado en cómo incluir los criterios 2 y 3.

    filter_data = df.loc[(df['A'].dropna)] 
2
CodeGeek123 12 ene. 2017 a las 15:27

2 respuestas

La mejor respuesta

Necesita una función especial para NaN - {{ X1}} y {{X2} }:

df['A'].notnull()
(df['B'] == 'X') | (df['B'].isnull())
df['C'].isnull()
4
jezrael 12 ene. 2017 a las 12:29

Puede usar query para encontrar nulos o no nulos. Los nulos tienden a no ser iguales a sí mismos.

df.dropna(subset=['A']) <=> df.query('A == A') <=> df[df.A.notnull()]


Sus tres filtros usando query

  1. df.query('A == A') o df.dropna(subset=['A']) o df[df.A.notnull()]
  2. df.query('B == "X" | B != B') o df.query('B == "X" or B != B')
  3. df.query('C != C') o df[df.C.isnull()]
2
Nickil Maveli 12 ene. 2017 a las 15:33