Mis matrices numpy se utilizan np.nan
para designar valores faltantes. A medida que repito el conjunto de datos, necesito detectar esos valores faltantes y manejarlos de formas especiales.
Usé ingenuamente numpy.isnan(val)
, que funciona bien a menos val
que no esté entre el subconjunto de tipos admitidos por numpy.isnan()
. Por ejemplo, los datos faltantes pueden ocurrir en campos de cadena, en cuyo caso obtengo:
>>> np.isnan('some_string')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Not implemented for this type
Aparte de escribir un contenedor costoso que detecta la excepción y devuelve False
, ¿hay alguna manera de manejar esto de manera elegante y eficiente?
pandas
tienepandas.isnull()
: no estoy seguro de si eso satisface sus necesidades, por lo que algunos datos de ejemplo podrían ser buenos.pandas.isnull()
parece funcionar perfectamente. El único tipo de datos con el que estoy tratando actualmente que se rompenumpy.isnan()
es la cadena y lopandas.isnull()
maneja bien. De hecho, parece manejar bien cualquier objeto arbitrario que le arroje. ¿Hubo algún problema específico que le preocupara? De lo contrario, es posible que desee enviar su comentario como una respuesta completa, ya que parece la respuesta canónica, al menos para los usuarios de pandas.Respuestas:
pandas.isnull()
(tambiénpd.isna()
, en versiones más recientes) comprueba los valores perdidos en matrices numéricas y de cadena / objeto. De la documentación, busca:Ejemplo rápido:
La idea de usar
numpy.nan
para representar valores perdidos es algo quepandas
introdujo, por esopandas
tiene las herramientas para lidiar con ello.Las fechas también (si las usa
pd.NaT
, no necesitará especificar el tipo d)fuente
¿Es tu tipo realmente arbitrario? Si sabe que solo será un flotador o una cadena int, podría hacer
asumiendo que está envuelto en numpy, siempre tendrá un dtype y solo float y complex pueden ser NaN
fuente
dtype
. Puede que tengas que hacerlotype(val) == 'float'
type(val) == float and np.isnan(val)
- funcionó para mí