Pandas
Pandas es una biblioteca de Python muy popular para la manipulación y análisis de datos. Proporciona estructuras de datos y herramientas de análisis de alto rendimiento y fáciles de usar. La estructura principal que ofrece Pandas es el DataFrame, que se puede imaginar como una tabla en Excel o una base de datos SQL, pero en el entorno de Python.
Principales características de Pandas
- DataFrame: Una estructura de datos bidimensional, similar a una tabla, que permite almacenar datos en filas y columnas.
- Series: Una estructura de datos unidimensional, similar a una lista o un arreglo.
- Funciones de manipulación de datos: Pandas proporciona numerosas funciones para la limpieza, transformación, agregación, y visualización de datos.
- Indexación: Herramientas avanzadas para la selección y filtrado de datos.
- Lectura y escritura de datos: Funciones para leer y escribir datos desde/hacia diferentes formatos, como CSV, Excel, SQL, JSON, y más.
Cómo instalar Pandas
Para instalar Pandas, necesitas tener instalado Python y el gestor de paquetes pip
. A continuación te indico los pasos para instalar Pandas:
- Instalar Pandas usando pip:
- Abre una terminal o línea de comandos.
- Ejecuta el siguiente comando:
pip install pandas
Esto descargará e instalará la última versión de Pandas y sus dependencias necesarias. Una vez completada la instalación, puedes verificar que Pandas se haya instalado correctamente ejecutando el siguiente comando en una sesión de Python:
import pandas as pd
print(pd.__version__)
Esto debería imprimir la versión de Pandas instalada, confirmando que la instalación fue exitosa.
Ejemplo básico de uso
Aquí tienes un ejemplo básico de cómo usar Pandas para crear un DataFrame y realizar algunas operaciones básicas:
import pandas as pd
# Crear un DataFrame
data = {
'Nombre': ['Ana', 'Luis', 'Juan', 'Marta'],
'Edad': [23, 34, 45, 22],
'Ciudad': ['Madrid', 'Barcelona', 'Valencia', 'Sevilla']
}
df = pd.DataFrame(data)
# Mostrar el DataFrame
print(df)
# Seleccionar una columna
print(df['Nombre'])
# Filtrar filas
print(df[df['Edad'] > 30])
# Calcular estadísticas descriptivas
print(df.describe())
Este es un pequeño ejemplo de lo que puedes hacer con Pandas. La biblioteca es muy poderosa y tiene muchas más funcionalidades que puedes explorar.
Series y Dataframes
Serie
Una Serie es una estructura de datos unidimensional proporcionada por Pandas. Se parece a una columna en una hoja de cálculo o a un arreglo unidimensional en otros lenguajes de programación. Cada elemento en una Serie tiene un índice, que es como una etiqueta que identifica cada elemento.
Ejemplo de Serie
import pandas as pd
# Crear una Serie
serie = pd.Series([10, 20, 30, 40], index=['a', 'b', 'c', 'd'])
# Mostrar la Serie
print(serie)
# Acceder a un elemento por su índice
print(serie['b'])
En este ejemplo, creamos una Serie con los valores [10, 20, 30, 40]
y especificamos un índice personalizado ['a', 'b', 'c', 'd']
. Luego mostramos la Serie completa y accedemos a un elemento específico usando su índice.
DataFrame
Un DataFrame es una estructura de datos bidimensional, similar a una tabla en una base de datos o a una hoja de cálculo. Un DataFrame está compuesto de múltiples Series, donde cada Serie representa una columna de datos. Cada columna puede tener un tipo de datos diferente (por ejemplo, enteros, flotantes, cadenas de texto).
Ejemplo de DataFrame
import pandas as pd
# Crear un DataFrame
data = {
'Nombre': ['Ana', 'Luis', 'Juan', 'Marta'],
'Edad': [23, 34, 45, 22],
'Ciudad': ['Madrid', 'Barcelona', 'Valencia', 'Sevilla']
}
df = pd.DataFrame(data)
# Mostrar el DataFrame
print(df)
# Acceder a una columna
print(df['Nombre'])
# Filtrar filas según una condición
print(df[df['Edad'] > 30])
# Calcular estadísticas descriptivas
print(df.describe())
En este ejemplo, creamos un DataFrame a partir de un diccionario. Las claves del diccionario ('Nombre'
, 'Edad'
, 'Ciudad'
) se convierten en los nombres de las columnas del DataFrame, y los valores asociados son las filas correspondientes.
Explicación detallada del DataFrame
- Crear el DataFrame: Usamos un diccionario donde las claves son los nombres de las columnas y los valores son listas de datos para cada fila.
- Mostrar el DataFrame: Imprimimos el DataFrame completo.
- Acceder a una columna: Seleccionamos una columna específica (
'Nombre'
) y la mostramos. - Filtrar filas: Aplicamos una condición para filtrar filas (
Edad
mayor a 30). - Estadísticas descriptivas: Calculamos estadísticas descriptivas para las columnas numéricas (
'Edad'
en este caso).
Diferencias clave
- Serie: Unidimensional, similar a una lista o un vector. Tiene un índice único para cada elemento.
- DataFrame: Bidimensional, similar a una tabla. Tiene índices para filas y nombres para columnas.
Espero que esta explicación y los ejemplos te hayan ayudado a entender qué son y cómo se utilizan las Series y los DataFrames en Pandas.
Funciones de manipulación de datos
Pandas proporciona una amplia gama de funciones para la manipulación de datos. Estas funciones permiten realizar tareas comunes y complejas de manera eficiente. Aquí te explico algunas de las funciones más útiles para la manipulación de datos en Pandas, junto con ejemplos.
Funciones de manipulación de datos en Pandas
- Selección y filtrado de datos
- Indexación y reindexación
- Renombrar columnas
- Agregar y eliminar columnas
- Operaciones de combinación y fusión
- Agrupamiento y agregación
- Ordenamiento
- Manejo de datos faltantes
- Aplicar funciones
1. Selección y filtrado de datos
Puedes seleccionar y filtrar datos de un DataFrame utilizando diferentes métodos.
import pandas as pd
# Crear un DataFrame
data = {
'Nombre': ['Ana', 'Luis', 'Juan', 'Marta'],
'Edad': [23, 34, 45, 22],
'Ciudad': ['Madrid', 'Barcelona', 'Valencia', 'Sevilla']
}
df = pd.DataFrame(data)
# Seleccionar una columna
print(df['Nombre'])
# Filtrar filas según una condición
print(df[df['Edad'] > 30])
2. Indexación y reindexación
Puedes cambiar el índice de un DataFrame o reindexarlo.
# Reindexar el DataFrame
df_reindexado = df.reindex([2, 0, 1, 3])
print(df_reindexado)
# Cambiar el índice
df.set_index('Nombre', inplace=True)
print(df)
3. Renombrar columnas
Puedes renombrar columnas usando rename
.
# Renombrar columnas
df_renombrado = df.rename(columns={'Edad': 'Años', 'Ciudad': 'Localidad'})
print(df_renombrado)
4. Agregar y eliminar columnas
Puedes agregar o eliminar columnas de un DataFrame.
# Agregar una nueva columna
df['País'] = 'España'
print(df)
# Eliminar una columna
df_sin_pais = df.drop(columns=['País'])
print(df_sin_pais)
5. Operaciones de combinación y fusión
Puedes combinar o fusionar DataFrames usando merge
y concat
.
# Crear otro DataFrame
data2 = {
'Nombre': ['Ana', 'Luis', 'Marta'],
'Salario': [30000, 40000, 35000]
}
df2 = pd.DataFrame(data2)
# Fusionar DataFrames
df_fusionado = pd.merge(df, df2, on='Nombre')
print(df_fusionado)
# Concatenar DataFrames
df_concatenado = pd.concat([df, df2], axis=1)
print(df_concatenado)
6. Agrupamiento y agregación
Puedes agrupar datos y aplicar funciones de agregación usando groupby
.
# Agrupar por 'Ciudad' y calcular la media de 'Edad'
df_agrupado = df.groupby('Ciudad')['Edad'].mean()
print(df_agrupado)
7. Ordenamiento
Puedes ordenar los datos en un DataFrame.
# Ordenar por 'Edad'
df_ordenado = df.sort_values(by='Edad')
print(df_ordenado)
8. Manejo de datos faltantes
Puedes manejar datos faltantes usando funciones como isnull
, dropna
y fillna
.
# Introducir valores faltantes
df.loc[1, 'Edad'] = None
# Eliminar filas con datos faltantes
df_sin_nan = df.dropna()
print(df_sin_nan)
# Rellenar datos faltantes
df_rellenado = df.fillna(0)
print(df_rellenado)
9. Aplicar funciones
Puedes aplicar funciones a tus datos usando apply
.
# Aplicar una función a una columna
df['Edad_doble'] = df['Edad'].apply(lambda x: x * 2)
print(df)
Indexación
La indexación en Pandas se refiere a la forma en que se accede, selecciona y manipula datos dentro de Series y DataFrames utilizando índices. Los índices en Pandas son etiquetas que identifican las posiciones de las filas y las columnas.
Tipos de Indexación
- Indexación básica: Usar nombres de columnas y filas directamente.
- Indexación basada en posición: Usar índices numéricos.
- Indexación basada en etiquetas: Usar etiquetas específicas para filas y columnas.
- Indexación con condiciones: Filtrar datos basados en condiciones.
Métodos de Indexación
- Uso de corchetes
[]
- Método
loc
- Método
iloc
1. Uso de Corchetes []
Este es el método más básico y directo para acceder a datos en Series y DataFrames.
Ejemplo con Series
import pandas as pd
# Crear una Serie
serie = pd.Series([10, 20, 30, 40], index=['a', 'b', 'c', 'd'])
# Acceder a un elemento usando su índice
print(serie['b']) # Output: 20
Ejemplo con DataFrame
# Crear un DataFrame
data = {
'Nombre': ['Ana', 'Luis', 'Juan', 'Marta'],
'Edad': [23, 34, 45, 22],
'Ciudad': ['Madrid', 'Barcelona', 'Valencia', 'Sevilla']
}
df = pd.DataFrame(data)
# Seleccionar una columna
print(df['Nombre'])
# Seleccionar múltiples columnas
print(df[['Nombre', 'Ciudad']])
# Filtrar filas basadas en una condición
print(df[df['Edad'] > 30])
2. Método loc
El método loc
se usa para indexación basada en etiquetas. Permite acceder a un subconjunto de datos utilizando las etiquetas de los índices.
# Seleccionar una fila por su etiqueta
print(df.loc[1]) # Fila con índice 1
# Seleccionar un rango de filas
print(df.loc[0:2]) # Desde la fila con índice 0 hasta la fila con índice 2
# Seleccionar filas y columnas específicas
print(df.loc[0:2, ['Nombre', 'Ciudad']]) # Filas 0 a 2 y columnas 'Nombre' y 'Ciudad'
3. Método iloc
El método iloc
se usa para indexación basada en posición. Permite acceder a un subconjunto de datos utilizando índices numéricos.
# Seleccionar una fila por su posición
print(df.iloc[1]) # Fila en la posición 1
# Seleccionar un rango de filas
print(df.iloc[0:2]) # Desde la fila en la posición 0 hasta la fila en la posición 2
# Seleccionar filas y columnas específicas por posición
print(df.iloc[0:2, 0:2]) # Filas 0 a 2 y columnas en las posiciones 0 y 1
Indexación con Condiciones
Puedes filtrar datos usando condiciones para seleccionar filas específicas.
# Filtrar filas donde la edad es mayor a 30
print(df[df['Edad'] > 30])
# Filtrar filas basadas en múltiples condiciones
print(df[(df['Edad'] > 30) & (df['Ciudad'] == 'Barcelona')])
Resumen
- Corchetes
[]
: Para selección básica de columnas y filas. loc
: Para selección basada en etiquetas.iloc
: Para selección basada en posiciones.- Condiciones: Para filtrar datos usando expresiones booleanas.
La indexación en Pandas es muy flexible y poderosa, permitiéndote acceder y manipular datos de manera eficiente según tus necesidades.
Exportación
Pandas facilita la lectura y escritura de datos desde y hacia varios formatos de archivo comunes como CSV, Excel y JSON. A continuación, se explican estos procesos con ejemplos detallados.
Lectura de datos
Leer desde CSV
Puedes usar la función pd.read_csv()
para leer archivos CSV.
import pandas as pd
# Leer un archivo CSV
df_csv = pd.read_csv('ruta/al/archivo.csv')
# Mostrar los primeros 5 registros
print(df_csv.head())
Leer desde Excel
Puedes usar la función pd.read_excel()
para leer archivos Excel. Necesitarás instalar el paquete openpyxl
si trabajas con archivos .xlsx
.
# Leer una hoja específica de un archivo Excel
df_excel = pd.read_excel('ruta/al/archivo.xlsx', sheet_name='Hoja1')
# Mostrar los primeros 5 registros
print(df_excel.head())
Leer desde JSON
Puedes usar la función pd.read_json()
para leer archivos JSON.
# Leer un archivo JSON
df_json = pd.read_json('ruta/al/archivo.json')
# Mostrar los primeros 5 registros
print(df_json.head())
Exportación de datos
Exportar a CSV
Puedes usar la función to_csv()
para exportar DataFrames a archivos CSV.
# Exportar a CSV
df_csv.to_csv('ruta/al/archivo_exportado.csv', index=False)
Exportar a Excel
Puedes usar la función to_excel()
para exportar DataFrames a archivos Excel. Nuevamente, asegúrate de tener el paquete openpyxl
instalado si trabajas con archivos .xlsx
.
# Exportar a Excel
df_excel.to_excel('ruta/al/archivo_exportado.xlsx', sheet_name='Hoja1', index=False)
Exportar a JSON
Puedes usar la función to_json()
para exportar DataFrames a archivos JSON.
# Exportar a JSON
df_json.to_json('ruta/al/archivo_exportado.json', orient='records')
Ejemplos completos
Ejemplo completo de lectura desde CSV
import pandas as pd
# Leer el archivo CSV
df_csv = pd.read_csv('datos.csv')
# Mostrar los primeros 5 registros
print(df_csv.head())
# Exportar a CSV
df_csv.to_csv('datos_exportados.csv', index=False)
Ejemplo completo de lectura desde Excel
import pandas as pd
# Leer el archivo Excel
df_excel = pd.read_excel('datos.xlsx', sheet_name='Hoja1')
# Mostrar los primeros 5 registros
print(df_excel.head())
# Exportar a Excel
df_excel.to_excel('datos_exportados.xlsx', sheet_name='Hoja1', index=False)
Ejemplo completo de lectura desde JSON
import pandas as pd
# Leer el archivo JSON
df_json = pd.read_json('datos.json')
# Mostrar los primeros 5 registros
print(df_json.head())
# Exportar a JSON
df_json.to_json('datos_exportados.json', orient='records')
Notas adicionales
- Rutas relativas y absolutas: Las rutas proporcionadas a las funciones de lectura y escritura pueden ser relativas o absolutas. Asegúrate de que los archivos existan en la ubicación especificada.
- Parámetros adicionales: Las funciones de lectura y escritura tienen numerosos parámetros adicionales que puedes utilizar para manejar casos especiales (por ejemplo, delimitadores diferentes en CSV, opciones de compresión, manejo de encabezados, etc.).
- Orientaciones de JSON: El parámetro
orient
ento_json
permite especificar diferentes formatos de salida (por ejemplo, 'records', 'split', 'table').