As stated by Mathieu in the comments, the error is due to the fact you are beginning at 0 instead of 1:
How do you find that error? First it is telling you there is a NaN comparison. There is only one comparison in your code: XN >= 1.e-9
1e-9 is not NaN, so XN must be. Therefore the error lies on the line XN=(sin(n)**2)/n. There are few ways to get a NaN result, and almost all of them are invalid operations. 0/0 or inf - inf for example.
I suspect you are using numpy.sin and not math.sin. Hence you are working with numpy floats instead of regular python floats. The difference is that on division by 0, python floats raise an error, while by default numpy fails silently and sets the number to NaN.
and to prove it, you can test it:
In : np.sin(0) ** 2 / 0
out : nan
Since you are a beginner, I will tell you other remarks I have on your code:
- You’re asked for the list length, but you are returng
len(Listtt) - 1, that may be an error - Using a
for n in range(9999)here is a suboptimal: it will fail if you need more than 9999 elements. You should use awhileloop or an infiniteforloop likefor n in itertools.count()(and since you need to start at 1, it should befor n in itertools.count(1). Listttis a pretty bad variable name (especially if you also haveListandListt, it is going to make your code very confusing to read), you could call it something more explicit likexn_list.
While working on #15255 I found an intermittent (hash-seed dependent) bug when calling checkodesol for a particular ODE:
from sympy.solvers.tests.test_ode import * from sympy import Ei eqn = Eq(Derivative(x*Derivative(f(x), x), x)/x, exp(x)) sol = Eq(f(x), C1 + C2*log(x) + exp(x) - Ei(x)) assert checkodesol(eqn, sol, order=2, solve_for_func=False)[0]
Note that the timings are consistently different in the cases where it crashes vs the cases where it doesn’t. Somehow a hash-seed dependent code path is taken long before the point where the exception is raised.
(venv) ~/current/sympy/sympy$ python --version Python 3.6.2 (venv) ~/current/sympy/sympy$ time PYTHONHASHSEED=0 python rtest.py real 0m1.582s user 0m1.307s sys 0m0.092s (venv) ~/current/sympy/sympy$ time PYTHONHASHSEED=1 python rtest.py Traceback (most recent call last): File "/Users/enojb/current/sympy/sympy/sympy/core/cache.py", line 93, in wrapper retval = cfunc(*args, **kwargs) File "/Users/enojb/current/sympy/sympy/sympy/core/expr.py", line 78, in sort_key args = expr.as_ordered_terms(order=order) File "/Users/enojb/current/sympy/sympy/sympy/core/expr.py", line 993, in as_ordered_terms terms, gens = self.as_terms() File "/Users/enojb/current/sympy/sympy/sympy/core/expr.py", line 1051, in as_terms gens = sorted(gens, key=default_sort_key) File "/Users/enojb/current/sympy/sympy/sympy/core/expr.py", line 336, in __lt__ raise TypeError("Invalid NaN comparison") TypeError: Invalid NaN comparison During handling of the above exception, another exception occurred: Traceback (most recent call last): File "rtest.py", line 6, in <module> assert checkodesol(eqn, sol, order=2, solve_for_func=False)[0] File "/Users/enojb/current/sympy/sympy/sympy/solvers/ode.py", line 2472, in checkodesol ode_or_bool = simplify(ode_or_bool) File "/Users/enojb/current/sympy/sympy/sympy/simplify/simplify.py", line 521, in simplify return expr._eval_simplify(ratio=ratio, measure=measure, rational=rational, inverse=inverse) File "/Users/enojb/current/sympy/sympy/sympy/core/relational.py", line 217, in _eval_simplify elif dif.equals(0): # XXX this is expensive File "/Users/enojb/current/sympy/sympy/sympy/core/expr.py", line 680, in equals constant = diff.is_constant(simplify=False, failing_number=True) File "/Users/enojb/current/sympy/sympy/sympy/core/expr.py", line 611, in is_constant if b is not None and b is not S.NaN and b.equals(a) is False: File "/Users/enojb/current/sympy/sympy/sympy/core/expr.py", line 670, in equals diff = factor_terms(simplify(self - other), radical=True) File "/Users/enojb/current/sympy/sympy/sympy/simplify/simplify.py", line 525, in simplify original_expr = expr = signsimp(expr) File "/Users/enojb/current/sympy/sympy/sympy/simplify/simplify.py", line 375, in signsimp e = sub_post(sub_pre(expr)) File "/Users/enojb/current/sympy/sympy/sympy/simplify/cse_opts.py", line 15, in sub_pre reps = [a for a in e.atoms(Add) if a.could_extract_minus_sign()] File "/Users/enojb/current/sympy/sympy/sympy/simplify/cse_opts.py", line 15, in <listcomp> reps = [a for a in e.atoms(Add) if a.could_extract_minus_sign()] File "/Users/enojb/current/sympy/sympy/sympy/core/expr.py", line 2294, in could_extract_minus_sign return bool(self.sort_key() < negative_self.sort_key()) File "/Users/enojb/current/sympy/sympy/sympy/core/cache.py", line 95, in wrapper retval = func(*args, **kwargs) File "/Users/enojb/current/sympy/sympy/sympy/core/expr.py", line 78, in sort_key args = expr.as_ordered_terms(order=order) File "/Users/enojb/current/sympy/sympy/sympy/core/expr.py", line 993, in as_ordered_terms terms, gens = self.as_terms() File "/Users/enojb/current/sympy/sympy/sympy/core/expr.py", line 1051, in as_terms gens = sorted(gens, key=default_sort_key) File "/Users/enojb/current/sympy/sympy/sympy/core/expr.py", line 336, in __lt__ raise TypeError("Invalid NaN comparison") TypeError: Invalid NaN comparison real 0m2.252s user 0m1.971s sys 0m0.098s
У меня есть датафрейм DF с 2 столбцами
Sub_marks Total_marks
40 90
60 80
100 90
0 0
Мне нужно найти, какие строки не соответствуют критериям sub_marks <= Total_marks. В настоящее время я использую функцию Sympy, как показано ниже
def fn_validate(formula,**args):
exp=sy.sympify(formula)
exp=exp.subs(args)
return exp
Я вызываю вышеуказанную функцию, используя метод apply, как показано ниже
df['val_check']=df.apply(lambda row:fn_validate('X<=Y',X=row['Sub_marks],Y=row['Total_marks']),axis=1)
Я ожидаю столбец val_check с результатами проверки истинности / ложности выражения. Но в случае 0 значений, я получаю ошибку.
Invalid Nan Comparison
Я не могу удалить эти значения из фрейма данных. Пожалуйста, дайте мне знать, есть ли другой способ сделать проверку этого выражения
2 ответа
Лучший ответ
Вы можете попробовать это:
df['val_check'] = df.Sub_marks <= df.Total_marks
df
Sub_marks Total_marks val_check
0 40 90 True
1 60 80 True
2 100 90 False
3 0 0 True
1
oppressionslayer
22 Дек 2019 в 05:31
Вы можете напрямую сравнивать столбцы и сохранять их в списке.
condition = df['sub_marks']>=df['total_marks']
print(condition)
Выход:
[True,True,False,True]
0
Strange
22 Дек 2019 в 05:33
Questions : Limit NaN comparison
2023-01-25T21:06:32+00:00 2023-01-25T21:06:32+00:00
794
I am a beginner, this is The question:
I have tried:
Listttt=[0]
for n in range(9999):
XN=(sin(n)**2)/n
if XN >= 1.e-9:
Listttt.append(XN)
KK=len(Listttt)-1
print(KK)
But it says «Invalid NaN comparison»
Total Answers 1
24
Answers 1 : of Limit NaN comparison
As stated by Mathieu in the comments, post uvdos python the error is due to the fact you are post uvdos python beginning at 0 instead of 1:
How do you find that error? First it is post uvdos python telling you there is a NaN comparison. post uvdos python There is only one comparison in your post uvdos python code: XN >= 1.e-9
1e-9 is not NaN, so XN must be. post uvdos python Therefore the error lies on the line post uvdos python XN=(sin(n)**2)/n. There are few ways to post uvdos python get a NaN result, and almost all of them post uvdos python are invalid operations. 0/0 or inf — inf post uvdos python for example.
I suspect you are using numpy.sin and post uvdos python not math.sin. Hence you are working with post uvdos python numpy floats instead of regular python post uvdos python floats. The difference is that on post uvdos python division by 0, python floats raise an post uvdos python error, while by default numpy fails post uvdos python silently and sets the number to NaN.
and to prove it, you can test it:
In : np.sin(0) ** 2 / 0
out : nan
Since you are a beginner, I will tell post uvdos python you other remarks I have on your code:
- You’re asked for the list length, but you are returng
len(Listtt) - 1, that may be an error - Using a
for n in range(9999)here is a suboptimal: it will fail if you need more than 9999 elements. You should use awhileloop or an infiniteforloop likefor n in itertools.count()(and since you need to start at 1, it should befor n in itertools.count(1). -
Listttis a pretty bad variable name (especially if you also haveListandListt, it is going to make your code very confusing to read), you could call it something more explicit likexn_list.
0
2023-01-25T21:06:32+00:00 2023-01-25T21:06:32+00:00Answer Link
mRahman
-
Type:
Bug
-
Status:
Reported -
Priority:
P4: Low
-
Resolution:
Unresolved
-
Affects Version/s:
5.5.1, 5.12.1
-
Fix Version/s:
None
-
Platform/s:
Linux/X11
QVariants comparison (Operator «>») is wrong when containing a «nan»-double value:
How to reproduce:
#include <math.h> #include <QVariant> #include <QDebug> int main() { double a = std::nan(""); double b = 0; Q_ASSERT(std::isnan(a)); qDebug() << "==" << (a==b); qDebug() << "<" << (a<b); qDebug() << ">" << (a>b); qDebug() << "==" << (QVariant(a) == QVariant(b)); qDebug() << "<" << (QVariant(a) < QVariant(b)); qDebug() << ">" << (QVariant(a) > QVariant(b)); Q_ASSERT((a==b) == (QVariant(a) == QVariant(b))); Q_ASSERT((a< b) == (QVariant(a) < QVariant(b))); Q_ASSERT((a> b) == (QVariant(a) > QVariant(b))); return 0; }
No reviews matched the request. Check your Options in the drop-down menu of this sections header.

От автора: В данной статье мы познакомимся со специальным свойством NaN (Not-A-Number), которое является значением, представляющим не-число.
Тип числа в JavaScript содержит целые числа и числа с плавающей запятой:
|
const integer = 4; const float = 1.5; typeof integer; // => ‘number’ typeof float; // => ‘number’ |
Плюс есть два специальных числовых значения: Infinity (число больше, чем любое другое число) и NaN (представляющее концепцию «не число»):

JavaScript. Быстрый старт
Изучите основы JavaScript на практическом примере по созданию веб-приложения
Узнать подробнее
|
const infinite = Infinity; const faulty = NaN; typeof infinite; // => ‘number’ typeof faulty; // => ‘number’ |
Хотя непосредственная работа с NaN редко встречается, оно может неожиданно появиться после неудачной операции с числами.
Давайте подробно рассмотрим специальное значение NaN: как проверить, содержит ли переменная NaN, и сценарии, которые в которых генерируется значения «не число».
1. Число NaN
Тип числа в JavaScript — это набор всех числовых значений, включая «не число», положительную бесконечность и отрицательную бесконечность.
«Not A Number» можно получить с помощью специального выражения NaN или как свойство глобального объекта или функции Number:
|
typeof NaN; // => ‘number’ typeof window.NaN; // => ‘number’ typeof Number.NaN; // => ‘number’ |
«Не число» — это значение, которое не представляет действительное число, несмотря на то, что оно имеет тип числа. Через NaN полезно представлять ошибочные операции с числами. Например, умножение числа на undefined не является допустимой операцией, поэтому дает NaN:
Также попытка разобрать недопустимую числовую строку, например, ‘Joker’ приводит к NaN:
|
parseInt(‘Joker’, 10); // => NaN |
2. Проверка на равенство с NaN
Интересным свойством NaN является то, что оно не равно ни одному значению, даже самому себе:
Это поведение полезно для определения, является ли переменная NaN:
|
const someNumber = NaN; if (someNumber !== someNumber) { console.log(‘Is NaN’); } else { console.log(‘Is Not NaN’); } // logs «Is NaN» |
Выражение someNumber !== someNumber равно true, только если someNumber является NaN. Таким образом, приведенный выше фрагмент регистрирует в консоли «Is NaN». JavaScript содержит встроенные функции для определения NaN: isNaN() и Number.isNaN():
|
isNaN(NaN); // => true isNaN(1); // => false Number.isNaN(NaN); // => true Number.isNaN(1); // => false |
Разница между этими функциями заключается в том, что Number.isNaN() не преобразуется свой аргумент в число:
|
isNaN(‘Joker12’); // => true Number.isNaN(‘Joker12’); // => false |
isNaN(‘Joker12’) преобразует аргумент ‘Joker12’ в число, которое является NaN. Таким образом, функция возвращает true.
С другой стороны, Number.isNaN(‘Joker12’) проверяет аргумент без преобразования. Функция возвращает false, потому ‘Joker12’ не равно NaN.
3. Операции, дающие NaN
3.1 Парсинг чисел
В JavaScript вы можете преобразовать числовые строки в числа. Например, вы можете легко преобразовать строку ‘1.5’ в число с плавающей запятой 1.5:
|
const numberString = ‘1.5’; const number = parseFloat(numberString); number; // => 1.5 |
Когда строка не может быть преобразована в число, функция синтаксического анализа возвращает NaN: указывая, что синтаксический анализ не выполнен. Вот некоторые примеры:

JavaScript. Быстрый старт
Изучите основы JavaScript на практическом примере по созданию веб-приложения
Узнать подробнее
|
parseFloat(‘Joker12.5’); // => NaN parseInt(‘Joker12’, 10); // => NaN Number(‘Joker12’); // => NaN |
При парсинге чисел рекомендуется проверить, не является ли результат парсинга NaN:
|
let inputToParse = ‘Invalid10’; let number; number = parseInt(inputToParse, 10); if (isNaN(number)) { number = 0; } number; // => 0 |
Парсинг inputToParse не удался, поэтому parseInt(inputToParse, 10) возвращается NaN. Условие if (isNaN(number)) оценивается, как true, и 0 назначается number.
3.2 undefined в качестве операнда
При использовании undefined в качестве операнда в арифметических операциях, таких как сложение, умножение и т д. мы получаем NaN. Например:
|
function getFontSize(style) { return style.fontSize; } const fontSize = getFontSize({ size: 16 }) * 2; const doubledFontSize = fontSize * 2; doubledFontSize; // => NaN |
getFontSize() — это функция, которая обращается к свойству fontSize из объекта стиля. При вызове getFontSize({ size: 16 }) результатом будкт undefined (свойство fontSize не существует в объекте { size: 16 }). fontSize * 2 оценивается как undefined * 2, что дает NaN.
«Not A Number» генерируется, когда в качестве значения в арифметических операциях используется отсутствующее свойство или функция, возвращающая undefined. Отсутствие undefined в арифметических операциях — это хороший способ предотвратить получение NaN.
3.3 NaN как операнд
Значение NaN также генерируется, когда операндом в арифметических операциях является NaN:
|
1 + NaN; // => NaN 2 * NaN; // => NaN |
NaN распространяется на арифметические операции:
|
let invalidNumber = 1 * undefined; let result = 1; result += invalidNumber; // appendresult *= 2; // duplicate result++; // increment result; // => NaN |
Операции с переменной result прерываются после добавления к result значения invalidNumber (которое является NaN).
3.4 Неопределенные формы
Значение NaN создается, когда арифметические операции имеют неопределенные формы. Деление 0 / 0 и Inifinity / Infinity:
|
0 / 0; // => NaN Infinity / Infinity; // => NaN |
Умножение 0 и Infinity:
Сложение бесконечных чисел с разными знаками:
|
—Infinity + Infinity; // => NaN |
3.5 Неверные аргументы математических функций
Квадратный корень из отрицательного числа:
|
Math.pow(—2, 0.5); // => NaN (—2) ** 0.5; // => NaN |
Или логарифм отрицательного числа:
4. Заключение
Понятие «не число», выраженное в JavaScript с помощью NaN, полезно для представления ошибочных операций над числами. NaN не равно ни одному значению, даже самому себе. Рекомендуемый способ проверить, содержит ли переменная NaN — использовать Number.isNaN(value).
Преобразование числовых строк в числа, в случае неудачи может дать NaN. Рекомендуется проверять, не возвращают ли parseInt(), parseFloat() или Number() NaN.
Если undefined или NaN используются в качестве операнда в арифметических операциях, это обычно приводит к NaN. Правильная обработка undefined (предоставление значений по умолчанию для отсутствующих свойств) является рекомендованным подходом для предотвращения этой ситуации.
Неопределенные формы или недопустимые аргументы для математических функций также приводят получению NaN. Но это случается редко. Вот мой практический совет: «Получили NaN? Ищите undefined!»
Автор: Dmitri Pavlutin
Источник: //dmitripavlutin.com
Редакция: Команда webformyself.

JavaScript. Быстрый старт
Изучите основы JavaScript на практическом примере по созданию веб-приложения
Узнать подробнее

JavaScript. Быстрый старт
Изучите основы JavaScript на практическом примере по созданию веб-приложения
Смотреть