Minhas matrizes numpy usam np.nan
para designar valores ausentes. À medida que faço a iteração no conjunto de dados, preciso detectar esses valores ausentes e tratá-los de maneiras especiais.
Usei ingenuamente numpy.isnan(val)
, o que funciona bem, a menos que val
não esteja entre o subconjunto de tipos suportados por numpy.isnan()
. Por exemplo, dados ausentes podem ocorrer em campos de string, caso em que recebo:
>>> np.isnan('some_string')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Not implemented for this type
Além de escrever um invólucro caro que captura a exceção e retorna False
, há uma maneira de lidar com isso de maneira elegante e eficiente?
pandas
tempandas.isnull()
: Não tenho certeza se isso atende às suas necessidades, portanto, alguns dados de exemplo podem ser bons.pandas.isnull()
parece funcionar perfeitamente. O único tipo de dados com o qual estou lidando atualmente com quebrasnumpy.isnan()
é string, epandas.isnull()
lida bem com isso. Na verdade, ele parece lidar bem com qualquer objeto arbitrário que eu joguei nele. Você estava preocupado com algum problema específico? Caso contrário, você pode querer enviar seu comentário como uma resposta completa, já que parece uma resposta canônica, pelo menos para usuários de pandas.Respostas:
pandas.isnull()
(tambémpd.isna()
, em versões mais recentes) verifica se há valores ausentes em matrizes numéricas e de string / objeto. Na documentação, ele verifica:Exemplo rápido:
A ideia de usar
numpy.nan
para representar valores ausentes é algo quepandas
introduzimos, por issopandas
tem as ferramentas para lidar com isso.Datetimes também (se você usar
pd.NaT
, não será necessário especificar o dtype)fonte
Seu tipo é realmente arbitrário? Se você sabe que será apenas um float interno ou string, você pode simplesmente fazer
assumindo que está envolvido em numpy, sempre terá um tipo d e apenas flutuante e complexo podem ser NaN
fonte
dtype
. Você pode ter que fazertype(val) == 'float'
type(val) == float and np.isnan(val)
- trabalhou para mim