Мои массивы numpy используют np.nan
для обозначения отсутствующих значений. Когда я перебираю набор данных, мне нужно обнаруживать такие отсутствующие значения и обрабатывать их особым образом.
Я наивно использовал numpy.isnan(val)
, который работает хорошо, если только val
он не входит в подмножество типов, поддерживаемых numpy.isnan()
. Например, в строковых полях могут быть отсутствующие данные, и в этом случае я получаю:
>>> np.isnan('some_string')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Not implemented for this type
Помимо написания дорогой оболочки, которая перехватывает исключение и возвращает False
, есть ли способ справиться с этим элегантно и эффективно?
pandas
haspandas.isnull()
: Я не уверен, что это соответствует вашим потребностям, поэтому некоторые примеры данных могут быть хорошими.pandas.isnull()
кажется, работает отлично. Единственный тип данных, с которым я в настоящее время имею дело с разрывами,numpy.isnan()
- это строка, иpandas.isnull()
она хорошо обрабатывается. Фактически, он, кажется, хорошо справляется со всеми любыми объектами, которые я ему бросил. Были ли какие-то конкретные проблемы, которые вас беспокоили? В противном случае вы можете отправить свой комментарий как полноценный ответ, поскольку он кажется каноническим ответом, по крайней мере, для пользователей pandas.Ответы:
pandas.isnull()
(а такжеpd.isna()
в более новых версиях) проверяет отсутствие значений как в числовых, так и в строковых / объектных массивах. Из документации он проверяет:Быстрый пример:
Идея использования
numpy.nan
для представления пропущенных значений былаpandas
введена, поэтомуpandas
есть инструменты, чтобы справиться с этим.Datetimes тоже (если вы используете,
pd.NaT
вам не нужно указывать dtype)источник
Ваш тип действительно произвольный? Если вы знаете, что это будет просто int float или строка, вы можете просто сделать
предполагая, что он обернут в numpy, он всегда будет иметь dtype, и только float и complex могут быть NaN
источник
dtype
. Возможно, вам придется сделатьtype(val) == 'float'
type(val) == float and np.isnan(val)
- работал у меня