NaN используется в качестве заполнителя для отсутствующих данных последовательно в панде , консистенция хорошая. Я обычно читаю / перевожу NaN как «отсутствующий» . Также см. Раздел «Работа с отсутствующими данными» в документации.
Уэс пишет в документах «Выбор NA-представления» :
После многих лет производственного использования [NaN] оказалось, по крайней мере, на мой взгляд, лучшим решением, учитывая состояние дел в NumPy и Python в целом. Специальное значение NaN (Not-A-Number) используется везде в качестве значения NA, и есть функции API , isnull
и notnull
которые могут быть использованы через dtypes для обнаружения значения NA.
...
Таким образом, я выбрал подход Pythonic «практичность превосходит чистоту» и обменял возможности целочисленного NA на гораздо более простой подход, заключающийся в использовании специального значения в массивах с плавающей запятой и объектных массивах для обозначения NA и переводе целочисленных массивов в плавающие, когда NA должны быть введен.
Примечание: ошибка в том, что целочисленные серии, содержащие отсутствующие данные, преобразуются в числа с плавающей запятой .
На мой взгляд, основная причина использования NaN (вместо None) заключается в том, что его можно сохранить с помощью numpy float64 dtype, а не менее эффективного объекта dtype, см. Продвижение типов NA .
s_bad = pd.Series([1, None], dtype=object)
s_good = pd.Series([1, np.nan])
In [13]: s_bad.dtype
Out[13]: dtype('O')
In [14]: s_good.dtype
Out[14]: dtype('float64')
Джефф комментирует это (ниже):
np.nan
позволяет векторизовать операции; это значение с плавающей запятой, в то время как None
, по определению, задает тип объекта, что в основном отключает всю эффективность в numpy.
Так что повторите 3 раза быстро: object == bad, float == good
При этом многие операции могут работать так же хорошо с None vs NaN (но, возможно, не поддерживаются, т.е. иногда могут давать удивительные результаты ):
In [15]: s_bad.sum()
Out[15]: 1
In [16]: s_good.sum()
Out[16]: 1.0
Чтобы ответить на второй вопрос:
вы должны использовать pd.isnull
и pd.notnull
для проверки отсутствующих данных (NaN).
qwerty
- это не число.