Pandas (con el estilo de pandas ) es una biblioteca de software escrita para el lenguaje de programación Python para la manipulación y el análisis de datos . En particular, ofrece estructuras de datos y operaciones para manipular tablas numéricas y series temporales . Es un software libre publicado bajo la licencia BSD de tres cláusulas . [2] El nombre se deriva del término " pan el da ta ", un término econométrico para conjuntos de datos que incluyen observaciones durante múltiples períodos de tiempo para los mismos individuos, [3] así como un juego de palabras con la frase "análisis de datos de Python". [4] : 5 Wes McKinney comenzó a construir lo que se convertiría en Pandas en AQR Capital mientras era investigador allí de 2007 a 2010. [5]
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. [ 6] La biblioteca está construida sobre otra biblioteca, NumPy .
El desarrollador Wes McKinney comenzó a trabajar en Pandas en 2008 mientras trabajaba en AQR Capital Management, debido a la necesidad de contar con una herramienta flexible y de alto rendimiento para realizar análisis cuantitativos de datos financieros. Antes de dejar AQR, logró convencer a la gerencia para que le permitiera publicar la biblioteca en código abierto .
Otro empleado de AQR, Chang She, se unió al esfuerzo en 2012 como el segundo contribuyente más importante a la biblioteca.
En 2015, Pandas se incorporó como proyecto patrocinado fiscalmente por NumFOCUS, una organización benéfica sin fines de lucro 501(c)(3) en los Estados Unidos. [7]
Pandas se basa en estructuras de datos llamadas Series y DataFrames . Los datos de estas colecciones se pueden importar desde varios formatos de archivo, como valores separados por comas , JSON , Parquet , tablas o consultas de bases de datos SQL y Microsoft Excel . [8]
Una serie es una estructura de datos unidimensional construida sobre la matriz de NumPy . [9] : 97 A diferencia de NumPy, cada punto de datos tiene una etiqueta asociada. La colección de estas etiquetas se llama índice. [4] : 112 Las series se pueden usar aritméticamente, como en la declaración series_3 = series_1 + series_2
: esto alineará los puntos de datos con los valores de índice correspondientes en series_1
y series_2
, luego los sumará para producir nuevos valores en series_3
. [4] : 114 Un DataFrame es una estructura de datos bidimensional de filas y columnas, similar a una hoja de cálculo , y análoga a un diccionario de Python que asigna nombres de columna (claves) a Series (valores), y cada Series comparte un índice. [4] : 115 Los DataFrames se pueden concatenar juntos o "fusionar" en columnas o índices de una manera similar a las uniones en SQL . [4] : 177–182 Pandas implementa un subconjunto del álgebra relacional y admite uniones uno a uno, muchos a uno y muchos a muchos. [9] : 147–148 Pandas también admite las menos comunes Panel y Panel4D , que son estructuras de datos tridimensionales y de cuatro dimensiones respectivamente. [9] : 141
Los usuarios pueden transformar o resumir datos aplicando funciones arbitrarias . [4] : 132 Dado que Pandas está construido sobre NumPy, todas las funciones de NumPy también funcionan en Series y DataFrames. [9] : 115 Pandas también incluye operaciones integradas para aritmética, manipulación de cadenas y estadísticas de resumen como media , mediana y desviación estándar . [4] : 139, 211 Estas funciones integradas están diseñadas para manejar datos faltantes, generalmente representados por el valor de punto flotante NaN . [4] : 142–143
Los subconjuntos de datos se pueden seleccionar por nombre de columna, índice o expresiones booleanas . Por ejemplo, df[df['col1'] > 5]
devolverá todas las filas del DataFrame df
para las que el valor de la columna col1
supere 5. [4] : 126–128 Los datos se pueden agrupar por un valor de columna, como en df['col1'].groupby(df['col2'])
, o por una función que se aplica al índice. Por ejemplo, df.groupby(lambda i: i % 2)
agrupa los datos en función de si el índice es par. [4] : 253–259
Pandas incluye soporte para series temporales , como la capacidad de interpolar valores [4] : 316–317 y filtrar utilizando un rango de marcas de tiempo (por ejemplo, data['1/1/2023':'2/2/2023']
devolverá todas las fechas entre el 1 de enero y el 2 de febrero). [4] : 295 Pandas representa los datos de series temporales faltantes utilizando un objeto NaT (Not a Timestamp) especial, en lugar del valor NaN que utiliza en otros lugares. [4] : 292
De forma predeterminada, un índice de Pandas es una serie de números enteros ascendentes desde 0, similar a los índices de las matrices de Python . Sin embargo, los índices pueden utilizar cualquier tipo de datos de NumPy, incluidos los de punto flotante, las marcas de tiempo o las cadenas. [4] : 112
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, no se garantiza que los valores de índice sean ú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. [4] : 136 Los nombres de columna de un DataFrame se almacenan e implementan de manera idéntica a un índice. Como tal, se puede pensar que un DataFrame tiene dos índices: uno basado en columnas y otro basado en filas. Debido a que los nombres de columna se almacenan como un índice, no se requiere que sean únicos. [9] : 103–105
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) denominada(s) a
. Para evitar esta ambigüedad, Pandas admite la sintaxis data.loc['a']
como una forma alternativa de filtrar utilizando el índice. Pandas también admite la sintaxis data.iloc[n]
, que siempre toma un entero n y devuelve el valor n , contando desde 0. Esto permite que un usuario actúe como si el índice fuera una secuencia de enteros similar a una matriz, independientemente de cómo esté realmente definido. [9] : 110–113
Pandas admite índices jerárquicos con múltiples valores por punto de datos. Un índice con esta estructura, llamado "MultiIndex", permite que un único DataFrame represente múltiples dimensiones, de forma similar a una tabla dinámica en Microsoft Excel . [4] : 147–148 A cada nivel de un MultiIndex se le puede dar un nombre único. [9] : 133 En la práctica, los datos con más de 2 dimensiones se representan a menudo utilizando DataFrames con índices jerárquicos, en lugar de las estructuras de datos de dimensiones superiores de Panel y Panel4D [9] : 128
Pandas ha sido criticado por su ineficiencia. Pandas puede requerir de 5 a 10 veces más memoria que el tamaño de los datos subyacentes, y todo el conjunto de datos debe cargarse en RAM . La biblioteca no optimiza los planes de consulta ni admite la computación paralela en varios núcleos . Wes McKinney, el creador de Pandas, ha recomendado Apache Arrow como una alternativa para abordar estos problemas de rendimiento y otras limitaciones. [10]