- Se descontinúan los backends de pandas y dask, y se eliminarán en la versión 10.0
- No hay diferencia funcional entre el backend de pandas y el backend predeterminado de DuckDB, y DuckDB ofrece un rendimiento muy superior
- Los DataFrame de pandas aún pueden usarse en Ibis como formato para intercambiar datos, pero ya no se admite ejecutar consultas usando pandas
- La mayor parte de esta lógica también aplica al backend de dask, y dask sigue siendo un excelente proyecto que debe seguir usándose fuera de Ibis
¿Por qué pandas? Y la historia de Ibis
- En los inicios de Ibis solo existía el backend de Impala
- Se añadió el backend de Postgres, pero la instalación era compleja, así que los usuarios no podían probar Ibis fácilmente
- Hacía falta una forma de probar la API de Ibis sin infraestructura adicional aparte de un notebook
- En ese momento, conectar el backend de
pandas, el único motor de DataFrame en memoria disponible, era la respuesta más obvia
Las dificultades del backend de Pandas
- pandas era la mejor opción en ese momento, pero no encajaba bien con el modelo de análisis de datos de Ibis
- El backend de pandas es fundamentalmente distinto de los demás backends y contiene la mayor cantidad de código especial
- pandas es esencialmente un motor de ejecución inmediata, mientras que Ibis usa un modelo de ejecución diferida
- Hacer que la interfaz de pandas funcione de forma diferida es complicado
- El backend de pandas es más lento que los demás y requiere miles de líneas de código
NaN en pandas y NULL en Ibis son conceptos fundamentalmente distintos, pero había que tratarlos como si fueran lo mismo
- En pandas se usó NaN como marcador de valores faltantes, pero eso causaba problemas de compatibilidad con otros backends
NULL representa un valor faltante, mientras que NaN significa “no es un número”; son conceptos fundamentalmente distintos
- Los nuevos tipos basados en Arrow de pandas son una gran mejora, pero aún tienen problemas
Genera confusión entre los nuevos usuarios
- La gente prefiere lo que le resulta familiar
- Al usar Ibis por primera vez, hay que elegir tanto Ibis como el backend
- Los nuevos usuarios suelen reportar que "Ibis es lento"
- En la mayoría de los casos, eso se debía a que estaban usando el backend de pandas
- Si hubieran usado DuckDB o Polars, habrían podido empezar mucho más fácilmente
Equivalencia funcional
- La razón más fuerte para eliminar el backend de pandas es la redundancia
- El backend de DuckDB puede consultar DataFrame de pandas sin problemas, admite varios tipos de UDF y puede leer y escribir múltiples formatos como parquet, CSV y JSON
- DuckDB es fácil de instalar, se ejecuta localmente, es muy rápido y se integra bien con el ecosistema de Python
Resumen de GN⁺
- Adoptar DuckDB como backend predeterminado parece una decisión muy acertada. Es fácil de instalar, se ejecuta localmente, es muy rápido y se integra bien con el ecosistema de Python. Esa también fue la razón por la que Ibis añadió originalmente
pandas como backend
- Que
pandas todavía pueda usarse como formato de intercambio de datos es una buena noticia para los usuarios actuales de pandas. No es necesario desechar por completo el código existente
- Sin embargo, dejar de usar
pandas para ejecutar consultas parece la dirección correcta. El modelo de ejecución ansiosa de pandas no encaja con el modelo de ejecución diferida de Ibis. Por eso, el backend de pandas a menudo es mucho más lento que usar pandas directamente
- A medida que Ibis admite cada vez más backends, mantener código ajustado a backends específicos será cada vez más difícil. Eliminar el backend de
pandas hará que la base de código sea más limpia y más fácil de mantener
- Si usar el backend de DuckDB puede reemplazar toda la funcionalidad de
pandas, no parece haber razón para mantener el backend de pandas. De hecho, puede terminar confundiendo a los nuevos usuarios
2 comentarios
La realidad es que todavía se sigue usando mucho
pandas, que es con lo que estamos más familiarizados,,Opiniones de Hacker News
NaN es el resultado de 0/0, lo que significa que el valor existe pero no se conoce con precisión
Nonede Python es distinto de NaN y NULLHay muchos motores de cómputo mejores que pandas
En los últimos meses, en proyectos nuevos se ha reemplazado pandas por ibis
La función de multiíndice de pandas es la más potente
Da curiosidad saber si han considerado Polars
pandas puede extenderse a nuevos tipos de columnas
El valor de Ibis no está en que permita usar DuckDB
No se ha oído hablar mucho de Ibis
La API de la biblioteca pandas no siempre es intuitiva
La razón para usar pandas es su ecosistema integrado
python dict, etc., y visualizarlos con plotly