Pandas (estilizado como pandas) es una biblioteca de software escrita para el lenguaje de programación Python para la manipulación y análisis de datos. En particular, ofrece estructuras de datos y operaciones para manipular tablas numéricas y series temporales. Es software libre publicado bajo la licencia BSD de tres cláusulas. El nombre se deriva del término "panel data", un término econométrico para conjuntos de datos que incluyen observaciones durante múltiples períodos de tiempo para los mismos individuos, así como un juego de palabras con la frase "Python data analysis". Wes McKinney comenzó a construir lo que se convertiría en Pandas en AQR Capital mientras trabajaba allí como investigador de 2007 a 2010.
El desarrollo de Pandas introdujo en Python muchas características comparables de trabajo con DataFrames que se establecieron en el lenguaje de programación R. La biblioteca está construida sobre otra biblioteca, NumPy.
Historia
El desarrollador Wes McKinney comenzó a trabajar en Pandas en 2008 mientras estaba en AQR Capital Management por la necesidad de una herramienta de alto rendimiento y flexible para realizar análisis cuantitativos sobre datos financieros. Antes de dejar AQR, pudo convencer a la gerencia para que le permitiera publicar la biblioteca como código abierto en 2009. Otro empleado de AQR, Chang She, se unió al esfuerzo en 2012 como el segundo contribuyente principal de la biblioteca. En 2015, Pandas se inscribió como un proyecto patrocinado fiscalmente de NumFOCUS, una organización benéfica sin fines de lucro 501(c)(3) en los Estados Unidos.
Modelo de datos
Pandas se construye alrededor de estructuras de datos llamadas Series y DataFrames. Los datos para estas colecciones pueden importarse desde varios formatos de archivo, como valores separados por comas, JSON, Parquet, tablas o consultas de bases de datos SQL, y Microsoft Excel.
Serie
Una Serie es un objeto unidimensional similar a un array que almacena una secuencia de valores junto con un conjunto asociado de etiquetas, llamado índice. Está construida sobre el array de NumPy y ofrece muchas funcionalidades similares, pero en lugar de usar posiciones enteras implícitas, una Serie permite etiquetas de índice explícitas de muchos tipos de datos. Una Serie puede crearse a partir de listas de Python, diccionarios o arrays de NumPy. Si no se proporciona un índice, pandas asigna automáticamente un índice entero predeterminado que va de 0 a n-1, donde n es el número de elementos en la Serie.
Para acceder a un valor o lista de valores de una Serie, use su índice o lista de índices. Las Series pueden usarse aritméticamente, como en la declaración serie_3 = serie_1 + serie_2. Esto alineará los puntos de datos con los valores de índice correspondientes en serie_1 y serie_2 (similar a una unión en álgebra relacional), y luego los sumará para producir nuevos valores en serie_3. Una Serie tiene varios atributos, como name (nombre de la Serie), dtype (tipo de datos de los valores), shape (número de filas), values e index. Pueden usarse en muchas de las mismas operaciones que los arrays de NumPy, con métodos adicionales para reindexación, selección basada en etiquetas y manejo de datos faltantes.
DataFrame
Un DataFrame es una estructura de datos bidimensional y tabular con filas y columnas etiquetadas. Cada columna se almacena internamente como una Serie y puede contener un tipo de datos diferente (numérico, cadena, booleano, etc.). Los DataFrames pueden crearse por diversos medios, incluidos diccionarios de listas, arrays de NumPy y archivos externos como hojas de cálculo CSV o Excel. Para recuperar una columna de un DataFrame como una Serie, use el índice (notación similar a diccionario) o el nombre de la columna si el nombre es un identificador válido de Python (acceso similar a atributo). Los DataFrames admiten operaciones como asignación de columnas, eliminación de filas y columnas, indexación basada en etiquetas con loc, indexación basada en posición con iloc, remodelación, agrupación y unión. Las operaciones de fusión implementan un subconjunto del álgebra relacional y permiten uniones uno a uno, muchos a uno y muchos a muchos.
Algunos atributos comunes de un DataFrame incluyen dtypes (tipo de datos de cada columna), shape (dimensiones del DataFrame devueltas como una tupla con la forma (número de filas, número de columnas)), index/columns (etiquetas de las filas/columnas del DataFrame, respectivamente, devueltas como un objeto Index), values (datos en el DataFrame devueltos como un array 2D) y empty (devuelve True si el DataFrame está vacío).
Índice
Los objetos Index contienen metadatos para objetos Series y DataFrame, como etiquetas de ejes y nombres, y se crean automáticamente a partir de los datos de entrada. Por defecto, un índice de pandas es una serie de enteros ascendentes desde 0, similar a los índices de los arrays de Python. Sin embargo, los índices también pueden usar cualquier tipo de datos de NumPy, incluidos punto flotante, marcas de tiempo o cadenas. Los índices también son inmutables, lo que permite compartirlos de manera segura entre múltiples objetos.
La sintaxis de pandas para mapear valores de índice a datos relevantes es la misma sintaxis que Python usa para mapear claves de diccionario a valores. Por ejemplo, si s es una Serie, s['a'] devolverá el punto de datos en el índice a. A diferencia de las claves de diccionario, los valores de índice no están garantizados a ser únicos. Si una Serie usa el valor de índice a para múltiples puntos de datos, entonces s['a'] devolverá en su lugar una nueva Serie que contiene todos los valores coincidentes. Los nombres de columna de un DataFrame se almacenan e implementan de manera idéntica a un índice. Como tal, un DataFrame puede considerarse como si tuviera dos índices: uno basado en columnas y otro basado en filas. Debido a que los nombres de columna se almacenan como un índice, estos no están obligados a ser únicos.
Si data es una Serie, entonces data['a'] devuelve todos los valores con el valor de índice de a. Sin embargo, si data es un DataFrame, entonces data['a'] devuelve todos los valores en la(s) columna(s) llamada(s) a. Para evitar esta ambigüedad, Pandas admite la sintaxis data.loc['a'] como una forma alternativa de filtrar usando el índice. Pandas también admite la sintaxis data.iloc[n], que siempre toma un entero n y devuelve el enésimo valor, contando desde 0. Esto permite al usuario actuar como si el índice fuera una secuencia similar a un array de enteros, independientemente de cómo esté realmente definido.
pandas también admite índices jerárquicos con múltiples valores por punto de datos a través de la clase "MultiIndex". Los objetos MultiIndex permiten que un solo DataFrame represente múltiples dimensiones, similar a una tabla dinámica en Microsoft Excel, donde cada nivel puede llevar opcionalmente su propio nombre único. En la práctica, los datos con más de 2 dimensiones a menudo se representan usando DataFrames con índices jerárquicos, en lugar de las estructuras de datos de mayor dimensión Panel y Panel4D.
Funcionalidad
pandas admite una variedad de técnicas de indexación y subconjunto, lo que permite seleccionar datos por etiqueta, índice o condiciones booleanas. Por ejemplo, df[df['col1'] > 5] devolverá todas las filas en el DataFrame df para las cuales el valor de la columna col1 supera 5. La biblioteca también implementa operaciones de agrupación basadas en el enfoque de dividir-aplicar-combinar, lo que permite a los usuarios agregar, transformar o reestructurar datos según valores de columna o funciones aplicadas a etiquetas de índice. Por ejemplo, df['col1'].groupby(df['col2']) agrupa los datos en 'col1' por sus valores en 'col2', mientras que df.groupby(lambda i: i % 2) agrupa todos los datos en todo el DataFrame según si su índice es par.
La biblioteca también proporciona herramientas para manejar datos faltantes, fusionar y unir conjuntos de datos, remodelar datos (por ejemplo, pivotar y fundir), funcionalidad de series temporales y entrada/salida para muchos formatos de archivo. Estas características hacen de pandas una piedra angular del ecosistema de ciencia de datos de Python, a menudo usado en conjunto con bibliotecas de Machine learning y flujos de trabajo de Artificial intelligence. Su integración con arrays de NumPy y compatibilidad con marcos de Deep learning han consolidado su papel en los pipelines de preprocesamiento de datos en todas las industrias, desde finanzas hasta análisis en la nube de Amazon Web Services.