Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

99
Views
Pasar un NaN de Python a través de Solicitud a Javacscript

Tengo una matriz de pandas con np.NaN que convierto en un diccionario para JSON

json_data = {"freq" : list(df["Data"])}

Me preparo para cargar en una página web a través del matraz jsonify

 @dashboard.route('/command', methods = ['GET', 'POST']) def command(): [...] return jsonify(json_data)

y por el lado de javascript me preparo para leerlo.

 $.ajax({ url: '/dashboard/command', type: 'POST', data: data, contentType: 'application/json; charset=utf-8', dataType: 'json', success: function(msg) { if (!msg.error) { updatePlot(msg); } else { alert(msg.error); } }, error: function (XMLHttpRequest, textStatus, errorThrown) { alert("There has been an error retrieving your data: \n\n" + errorThrown); }, complete: function() { $("#update-plot").prop('disabled', false); // Re-enable button $("#update-plot-loading").addClass('invisible'); // Hide loading animation }

Y ahí es donde muere si cargo esa página web. Dice que tiene un token "N" incorrecto en el json. Si reemplazo los NaN antes de intentar enviar, por ejemplo

 df["Data"].replace(np.NaN, -999.999)

y todo está bien y el javascript puede continuar. Soy consciente de que los NaN deberían ser "nulo" en el lado de javascript, así que lo que hago en este momento (ugh) es convertir los -999.999 en "nulo" ... Pero Dios, ¿no debería haber una manera? enviar los datos que faltan directamente?

¿Alguna sugerencia? Probé muchas combinaciones de NaN, "NaN", Ninguno, etc. Pero tal vez me perdí una. Revisé la salida de jsonify en Python y parece ser una respuesta válida para enviar.

gracias, t

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Ajá. Progreso, algo así. Al menos en el lado de Flask, tal vez no en Ajax. Considere un Pandas con algo de np.Nan en él ... Conviértalo en un dictado o lo que sea y luego llame a render_template

 s = render_template('dashboard/dashboard_horizontal.html', average_data = average_data)

Aquí es donde se hace el daño... pero se puede arreglar con

 s = s.replace("nan", "NaN") #this is dumb but works!!

Un problema relacionado ocurre con false en json. Cuando lo lees en Python, el analizador lo convierte convenientemente en False . Excepto que ahora creó un problema en el lado de Javascript, pero también se puede solucionar de la misma manera.

 s = s.replace("False", "false") #this is dumb too

No sé si hay algunas palabras clave que podrían pasarse a render_template para hacer esto automáticamente.

about 4 years ago · Juan Pablo Isaza Report

0

Ok, también tengo una solución Ajax para NaN, que es la idea de JSON5 que se explica aquí: Cómo analizar la cadena JSON que contiene "NaN" en Node.js. Específicamente, no use dataType json, vaya con 'texto' y realice el análisis a mano.

 $.ajax({ url: '/dashboard/command', type: 'POST', data: data, contentType: 'application/json; charset=utf-8', dataType: 'text', // it was 'json' //async: false, success: function(msg) { if (!msg.error) { var data = json5.parse(msg); // json5 so much more friendly updatePlot(data); } else { alert(msg.error); } }, error: function (XMLHttpRequest, textStatus, errorThrown) { alert("Error:\n\n" + errorThrown); }, complete: function() { $("#update-plot").prop('disabled', false); // Re-enable button $("#update-plot-loading").addClass('invisible'); } }); }
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!