Tengo esto DataFrame
y solo quiero los registros cuya EPS
columna no es NaN
:
>>> df
STK_ID EPS cash
STK_ID RPT_Date
601166 20111231 601166 NaN NaN
600036 20111231 600036 NaN 12
600016 20111231 600016 4.3 NaN
601009 20111231 601009 NaN NaN
601939 20111231 601939 2.5 NaN
000001 20111231 000001 NaN NaN
... es decir, algo así como df.drop(....)
obtener este marco de datos resultante:
STK_ID EPS cash
STK_ID RPT_Date
600016 20111231 600016 4.3 NaN
601939 20111231 601939 2.5 NaN
¿Cómo puedo hacer eso?
df.dropna(subset = ['column1_name', 'column2_name', 'column3_name'])
Respuestas:
No deje caer, solo tome las filas donde EPS no es NA:
fuente
pandas.notnull
lugar denp.isfinite
EPS
en el ejemplo) contiene cadenas u otros tipos que no pueden ser digeridosnp.isfinite()
. Recomiendo usarpandas.notnull()
que manejará esto más generosamente.Esta pregunta ya está resuelta, pero ...
... también considere la solución sugerida por Wouter en su comentario original . La capacidad de manejar datos faltantes, incluidos
dropna()
, está integrada explícitamente en pandas. Además de un rendimiento potencialmente mejorado sobre hacerlo manualmente, estas funciones también vienen con una variedad de opciones que pueden ser útiles.También hay otras opciones (consulte los documentos en http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.dropna.html ), incluida la colocación de columnas en lugar de filas.
Bastante útil!
fuente
df.dropna(subset = ['column_name'])
. Espero que ahorre al menos a una persona los 5 segundos adicionales de "¿qué estoy haciendo mal?". Gran respuesta, +1df.dropna(subset = ['column_name'])
es exactamente lo que estaba buscando! ¡Gracias!Sé que esto ya ha sido respondido, pero solo por el bien de una solución puramente panda a esta pregunta específica en oposición a la descripción general de Aman (que fue maravilloso) y en caso de que alguien más se dé cuenta de esto:
fuente
df.dropna(subset=['EPS'])
(basado en la descripción general de Aman, por supuesto, esto también funciona)notnull
es también lo que Wes (autor de Pandas) sugirió en su comentario sobre otra respuesta.df[pd.notnull(df[df.columns[INDEX]])]
dóndeINDEX
estaría la columna numerada si no sabe el nombrePuedes usar esto:
fuente
how='all'
es redundante en este caso, ya que en subconjuntos de trama de datos sólo con un campo para tanto'all'
y'any'
tendrá el mismo efecto.La más simple de todas las soluciones:
fuente
Puede usar el método de marco de datos notnull o inverso de isnull o numpy.isnan :
fuente
Manera simple y fácil
df.dropna(subset=['EPS'],inplace=True)
fuente: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.dropna.html
fuente
inplace=True
Es un tema extraño y no tiene ningún efectoDataFrame.dropna()
. Ver: github.com/pandas-dev/pandas/issues/16529otra solución que utiliza el hecho de que
np.nan != np.nan
:fuente
Otra version:
fuente
Series.notna()
?En los conjuntos de datos que tienen una gran cantidad de columnas, es aún mejor ver cuántas columnas contienen valores nulos y cuántas no.
Por ejemplo, en mi marco de datos contenía 82 columnas, de las cuales 19 contenían al menos un valor nulo.
Además, también puede eliminar automáticamente las columnas y filas dependiendo de cuál tenga valores más nulos.
Aquí está el código que hace esto de manera inteligente:
Nota: el código anterior elimina todos sus valores nulos. Si desea valores nulos, procéselos antes.
fuente
Se puede agregar en ese '&' se puede usar para agregar condiciones adicionales, por ejemplo
Tenga en cuenta que al evaluar las declaraciones, los pandas necesitan paréntesis.
fuente
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
. Necesita agregar paréntesisdf = df[(df.EPS > 2.0) & (df.EPS <4.0)]
, pero tampoco es una respuesta para esta pregunta.Por alguna razón, ninguna de las respuestas enviadas anteriormente funcionó para mí. Esta solución básica hizo:
Aunque, por supuesto, eso también eliminará filas con números negativos. Entonces, si quieres esos, probablemente también sea inteligente agregar esto después.
fuente
Una de las soluciones puede ser
Otra forma puede ser
Espero que sean útiles.
fuente