Las 10 funciones de Pandas que todo principiante debe conocer

Python, 19-dic-20245 minutos de lectura

Pandas es la biblioteca a la que recurren los analistas de datos y los programadores de Python que se aventuran en el mundo de la manipulación y el análisis de datos. Su sintaxis intuitiva y sus potentes estructuras de datos hacen que el manejo de grandes conjuntos de datos no sólo sea manejable, sino también eficiente. Tanto si está importando archivos CSV, limpiando conjuntos de datos desordenados o analizando tendencias de datos, Pandas tiene las herramientas que necesita.

Si estás empezando tu viaje de aprendizaje de Pandas, este post te presentará 10 funciones y métodos esenciales que todo principiante debería dominar. Estas funciones te ayudarán a cargar, inspeccionar, limpiar y analizar datos con facilidad.
Aquí tienes un resumen rápido de cada método y lo que hace:

  • read_csv(): Carga datos de un archivo CSV en un DataFrame de Pandas.
  • cabeza(): Muestra las primeras filas del DataFrame.
  • info(): Proporciona un resumen conciso del DataFrame, incluidos los tipos de columna y los valores que faltan.
  • describir(): Genera estadísticas descriptivas para columnas numéricas.
  • isnull(): Identifica los datos que faltan en el DataFrame.
  • dropna(): Elimina las filas o columnas en las que faltan datos.
  • fillna(): Sustituye los datos que faltan por los valores especificados.
  • groupby(): Agrupa los datos en función de una o varias columnas y aplica funciones de agregación.
  • ordenar_valores(): Ordena el DataFrame por una o más columnas.
  • aplicar(): Aplica funciones personalizadas a filas o columnas del DataFrame.

Requisitos previos

En primer lugar, asegúrate de que Python está instalado en tu máquina. Si no lo está, puedes descargarlo desde este enlace.
Una vez instalado Python, confirma que la librería Pandas está instalada. Si no lo está, puedes añadirla fácilmente usando el siguiente comando:

pip install pandas

Utilizaremos el siguiente conjunto de datos ficticios sobre bienes inmuebles para nuestros ejemplos:

PropertyIDUbicaciónDormitoriosBañosPrecioMetraje cuadradoFecha de listado
101Nueva York3275000018002023-05-15
102San Francisco2185000014002023-06-01
103Los Angeles4325002023-04-10
104Chicago326500001700
105Miami54120000035002023-03-22
106Houston4345000020002023-07-01

Las 10 mejores funciones y métodos de Pandas

1. read_csv(): Carga los datos de un fichero CSV en un DataFrame de Pandas.

El primer paso en el uso de pandas es cargar los datos para prepararlos para su procesamiento o análisis. Uno de los métodos más comunes para importar datos a un DataFrame de pandas es la función read_csv().

Ejemplo de código:

import pandas as pd
# Cargar el conjunto de datos en un Pandas DataFrame
file_path = "real_estate_listings.csv" # Sustitúyase por la ruta real del archivo

# Crear el DataFrame
df = pd.read_csv(file_path)

En primer lugar, empezaremos importando la biblioteca pandas. Utilizando como pd es una convención común entre los desarrolladores para simplificar el código. Por ejemplo, en lugar de escribir pandas.read_csv()podemos utilizar simplemente pd.read_csv()para que el código sea más conciso y fácil de leer.

A continuación, especifique la ruta al archivo CSV que desea cargar en un DataFrame de Pandas. A continuación, cree una variable y utilice el método leer_csv para cargar el archivo en el DataFrame.

Parámetros clave:

Exploremos ahora algunos parámetros importantes que sigue este método:

  • delimitador: Especifique el delimitador utilizado en el archivo CSV (por ejemplo, ,, ;, \t).
df = pd.read_csv(ruta_archivo, delimitador=',')
  • índice_col: En nuestra tabla, cada propiedad está identificada por un ID que se encuentra en el campo "PropertyID". Para asegurarnos de que pandas utiliza esta columna como identificador único para cada propiedad, podemos establecerla explícitamente como columna ID. De lo contrario, pandas generará y asignará automáticamente sus propios valores de ID a cada listado.
df = pd.read_csv(file_path, index_col='PropertyID')
  • usecols: Si su fichero CSV contiene numerosas columnas pero sólo necesita unas pocas, pandas le permite conseguirlo fácilmente utilizando un parámetro específico.
df = pd.read_csv(file_path, usecols=['Ubicación', 'Precio', 'Dormitorios'])

2. head() y tail(): Inspeccionar datos

Ahora que los datos están cargados en el DataFrame, podemos empezar a explorarlos. Para ello, Pandas proporciona dos métodos muy útiles: cabeza() y cola(). Estos métodos son esenciales para inspeccionar rápidamente las primeras o las últimas filas de su conjunto de datos.

  • head(): Este método muestra por defecto las 5 primeras filas del conjunto de datos. Es especialmente útil para verificar que los datos se han cargado correctamente y comprobar su estructura.
  • tail(): Este método funciona de forma similar a head(), pero en su lugar muestra las últimas filas. Resulta útil para examinar el final del conjunto de datos, sobre todo para comprobar si los datos están completos o si faltan valores en los registros finales.

Ejemplo de código:

# Ver las 5 primeras filas
print(df.head())
# Ver las 3 últimas filas
print(df.tail(3))

Salida de cabeza():

PropertyIDUbicaciónDormitoriosBañosPrecioMetraje cuadradoFecha de listado
101Nueva York3275000018002023-05-15
102San Francisco2185000014002023-06-01
103Los Angeles4325002023-04-10
104Chicago326500001700
105Miami54120000035002023-03-22

Salida de cola():

PropertyIDUbicaciónDormitoriosBañosPrecioMetraje cuadradoFecha de listado
104Chicago326500001700
105Miami54120000035002023-03-22
106Houston4345000020002023-07-01

3. info() - Comprender la estructura de DataFrame

La función info() proporciona un resumen conciso del DataFrame. Incluye detalles como:

  • El número de filas y columnas.
  • Nombres de columnas y sus tipos de datos.
  • El recuento de valores no nulos en cada columna.

Este método es útil para comprender rápidamente la estructura del conjunto de datos y detectar problemas como valores que faltan o tipos de datos incorrectos.

Ejemplo de código:

# Obtener un resumen conciso del DataFrame
print(df.info())

El código anterior produce el siguiente resultado:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 6 entries, 0 to 5
Data columns (total 7 columns):
#   Column          Non-Null Count  Dtype 
---  ------          --------------  ----- 
0   PropertyID      6 non-null      int64 
1   Location        6 non-null      object
2   Bedrooms        6 non-null      int64 
3   Bathrooms       6 non-null      int64 
4   Price           5 non-null      float64
5   SquareFootage   6 non-null      int64 
6   ListingDate     5 non-null      object
dtypes: float64(1), int64(4), object(2)
memory usage: 464.0+ bytes

4. describir(): Generar estadísticas resumidas

En describir() ofrece un resumen rápido de parámetros estadísticos clave como media, desviación típica, percentilesy mucho más. Por defecto, describir() trabaja con datos numéricos, pero también puede manejar datos categóricos, ofreciendo información personalizada en función del tipo de datos.

Parámetros clave:

  • percentiles: Una lista de números entre 0 y 1, especificando qué percentiles devolver. El valor por defecto es Ninguno, que devuelve los percentiles 25, 50 y 75. Más información aquí.
  • incluir: Lista de tipos de datos que se incluirán en el resumen. Puede especificar tipos de datos como int, float, object (para cadenas), etc. El valor predeterminado es Ninguno, lo que significa que se incluyen todos los tipos numéricos.
  • excluir: Lista de tipos de datos que se excluirán del resumen. Este parámetro también es Ninguno por defecto, lo que significa que no se excluye ningún tipo.

Ejemplo de código:

imprimir(df.describe())

La salida del código es la siguiente:

       PropertyID Ubicación Dormitorios ...         Precio MetrosCuadrados FechaCalificación
recuento 6.000000 6 6.000000... 5.000000e+00 6.000000 5
único NaN 6 NaN ...           NaN NaN 5
top NaN Nueva York NaN ...           NaN NaN 2023-05-15
freq NaN 1 NaN ...           NaN NaN 1
media 103.500000 NaN 3.500000... 7.800000e+05 2150.000000 NaN
std 1.870829 NaN 1.048809... 2.774887e+05 755.645419 NaN
mín 101,000000 NaN 2,000000... 4,500000e+05 1400,000000 NaN
25% 102,250000 NaN 3,000000... 6,500000e+05 1725,000000 NaN
50% 103.500000 NaN 3.500000... 7,500000e+05 1900,000000 NaN
75% 104,750000 NaN 4,000000... 8,500000e+05 2375,000000 NaN
máx. 106,000000 NaN 5,000000... 1.200000e+06 3500.000000 NaN

Explicación de cada estadística

  • Cuenta: El número de entradas que no faltan en cada columna.
    • Por ejemplo: recuento = 6 para Dormitorios, lo que indica que todas las filas tienen datos válidos.
  • Media: El valor medio de la columna.
    • Por ejemplo: media = 3,5 para Dormitorioslo que indica una media de 3,5 dormitorios por propiedad.
  • Std: La desviación típica, que muestra la dispersión de los valores con respecto a la media.
    • Por ejemplo: std = 1,048809 para Dormitorioslo que significa que hay una variación moderada en el número de dormitorios.
  • Mín/Máx: Los valores más pequeño y más grande.
    • Por ejemplo: min = 2 y máx = 5 para Dormitorios.
  • 25%, 50%, 75% (Cuartiles): Representan la dispersión de los datos:
    • 25%: Valor por debajo del cual se sitúa el 25% de los datos (primer cuartil).
    • 50%: El valor mediano.
    • 75%: Valor por debajo del cual se sitúa el 75% de los datos (tercer cuartil).

5. isnull(): Identificar los datos que faltan

En isnull() ayuda a identificar los datos que faltan en un DataFrame. Devuelve un DataFrame con la misma forma que el original, con Verdadero cuando faltan datos NaN y Falso de lo contrario. Se suele utilizar con otras funciones como suma() para contar los valores que faltan en columnas o filas.

Ejemplo de código:

# Identificar los valoresque faltan
print(df.isnull())
# Contar los valores que faltan en cada columna
print(df.isnull().sum())

df.isnull() Salida:

  PropertyID  Ubicación  Dormitorios  Baños  Precio  Metros cuadrados  ListingDate
0       Falso     Falso     Falso      Falso  Falso          Falso        Falso
1       Falso     Falso     Falso      Falso  Falso          Falso        Falso
2       Falso     Falso     Falso      Falso   Verdadero          Falso        Falso
3       Falso     Falso     Falso      Falso  Falso          Falso         Verdadero
4       Falso     Falso     Falso      Falso  Falso          Falso        Falso
5       Falso     Falso     Falso      Falso  Falso          Falso        Falso

df.isnull().sum() Salida:

PropiedadID 0
Localización 0
Dormitorios 0
Baños 0
Precio 1
Metros cuadrados 0
FechaCalificación 1
dtype: int64

6. dropna(): Eliminar datos que faltan

En dropna() la función elimina filas o columnas con datos que faltan NaN del DataFrame. Por defecto, elimina las filas con valores perdidos. Puede personalizar su comportamiento para eliminar sólo columnas, o para eliminar filas/columnas en las que falten todos los valores o un subconjunto específico de ellos.

Ejemplo de código:

# Eliminar las filas con valores perdidos 
df_dropped_rows = df.dropna()
print(df_dropped_rows)

# Eliminar las columnas con valores perdidos 
df_dropped_columns = df.dropna(axis=1)
print(df_columnas_eliminadas)

Este es el aspecto del DataFrame después de eliminar todo filas que contiene NaN valores:

PropertyIDUbicaciónDormitoriosBañosPrecioMetraje cuadradoFecha de listado
101Nueva York3275000018002023-05-15
102San Francisco2185000014002023-06-01
105Miami54120000035002023-03-22
106Houston4345000020002023-07-01

Este es el marco de datos con columnas que contiene NaN valores eliminados.

PropertyIDUbicaciónDormitoriosBañosMetraje cuadrado
101Nueva York321800
102San Francisco211400
103Los Angeles432500
104Chicago321700
105Miami543500
106Houston432000

7. fillna(): Reemplazar datos que faltan

En fillna() sustituye los datos que faltan NaN con los valores especificados. Los pandas dropna() maneja y elimina eficazmente los valores nulos de un DataFrame, mientras que el método fillna() ofrece una solución flexible para sustituir NaN con un valor específico de su elección. Este método ofrece un enfoque flexible para gestionar los datos que faltan, ya que le permite rellenar los huecos utilizando un valor fijo, el media, mediana, modou otras estadísticas calculadas.

Ejemplo de código:

# Rellenar los valores que faltan en la columna "Precio" con el precio medio df['Precio'] = 
df['Precio'].fillna(df['Precio'].media()) 
print(df)

La salida del código demuestra que el NaN se ha sustituido con éxito por el precio medio.

PropertyIDUbicaciónDormitoriosBañosPrecioMetraje cuadradoFecha de listado
101Nueva York3275000018002023-05-15
102San Francisco2185000014002023-06-01
103Los Angeles4378000025002023-04-10
104Chicago326500001700NaN
105Miami54120000035002023-03-22
106Houston4345000020002023-07-01

En Fecha de listado también contiene una columna NaN valor. En lugar de realizar un cálculo, podemos utilizar simplemente un marcador de posición como "desconocido. He aquí cómo hacerlo;

# Rellenar los valores que faltan en la columna 'ListingDate' con un marcador de posición
 df['ListingDate'] = df['ListingDate'].fillna('Desconocido')
print(df)

El Dataframe tiene ahora el siguiente aspecto:

PropertyIDUbicaciónDormitoriosBañosPrecioMetraje cuadradoFecha de listado
101Nueva York3275000018002023-05-15
102San Francisco21NaN14002023-06-01
103Los Angeles4378000025002023-04-10
104Chicago326500001700Desconocido
105Miami54120000035002023-03-22
106Houston4345000020002023-07-01

8. groupby(): Agrupar y agregar datos

La función groupby() en Pandas es una herramienta versátil y potente para dividir un DataFrame en grupos basados en una o más columnas, permitiendo un análisis y agregación de datos eficiente.
Funciona según el principio de dividir-aplicar-combinar:
primero, los datos se dividen en grupos;
después, se aplica una función específica a cada grupo;
finalmente, los resultados se combinan en un nuevo DataFrame.
Este enfoque simplifica las complejas tareas de manipulación de datos y aumenta la eficacia analítica.

Ejemplo de código:

Por ejemplo, puede calcular el precio medio de los inmuebles por ubicación o contar el número de anuncios por categoría de habitaciones.

# Agrupar por 'Ubicación' y calcular el precio medio
avg_price_by_location = df.groupby('Ubicación')['Precio'].mean()
print(precio_avg_por_localización)
# Agrupar por 'Dormitorios ' y calcular el total de metros cuadrados
total_pie_por_dormitorios = df.groupby('Dormitorios')['Metraje_cuadrado'].sum()
print(total_pies_cuadrados_por_dormitorios)
# Agrupar por varias columnas y calcular el recuento
count_by_location_bedrooms = df.groupby(['Ubicación', 'Dormitorios']).size()
print(recuento_por_habitaciones)

Precio medio por localidad:

Ubicación
Chicago 650000,0
Houston 450000,0
Los Ángeles NaN
Miami 1200000.0
Nueva York 750000,0
San Francisco 850000.0
Nombre: Precio, dtype: float64

Metros cuadrados totales por dormitorios:

Habitaciones
2    1400
3    3500
4    4500
5    3500

Recuento por ubicación y dormitorios:

Ubicación Dormitorios
Chicago 3 1
Houston 4 1
Los Angeles 4 1
Miami 5 1
Nueva York 3 1
San Francisco 2 1
dtype: int64

9. sort_values(): Ordenar datos

La función sort_values( ) se utiliza para ordenar su DataFrame por una o más columnas, ya sea en orden ascendente o descendente. La ordenación es esencial para clasificar datos, identificar extremos (por ejemplo, las propiedades de mayor precio) o simplemente organizar el conjunto de datos para una mejor legibilidad.

Ejemplo de código:

# Ordenar por 'Precio' en orden descendente
df_sorted_by_price = df.sort_values(by='Precio', ascendente=False)
print(df_sorted_by_price)
# Ordenar por 'Ubicación' en orden ascendente
df_sorted_by_location = df.sort_values(by='Ubicación')
print(df_sorted_by_location)
# Ordenar por varias columnas: primero por 'Dormitorios' (ascendente) y luego por 'Precio' (descendente)
df_sorted_by_bedrooms_price = df.sort_values(by=['Dormitorios', 'Precio'], ascending=[True, False])
print(df_sorted_by_bedrooms_price)

Ordenar por precio (descendente):

  PropertyID Ubicación Dormitorios ...      Precio MetrosCuadrados Fecha
4 105 Miami 5... 1200000.0 3500 2023-03-22
1 102 San Francisco 2...  850000.0 1400 2023-06-01
0 101 Nueva York 3...  750000.0 1800 2023-05-15
3 104 Chicago 3...  650000.0 1700 NaN
5 106 Houston 4...  450000.0 2000 2023-07-01
2 103 Los Ángeles 4...        NaN 2500 2023-04-10

Ordenar por ubicación (ascendente):

[6 filas x 7 columnas]
  PropertyID Ubicación Dormitorios ...      Precio MetrosCuadrados FechaCalificación
3  104  Chicago  3 . ..   650000.0  1700  NaN
5  106  Houston  4 . ..   450000.0  2000  2023-07-01
2  103  Los Ángeles  4 . ..        NaN  2500  2023-04-10
4  105  Miami  5 . ..  1200000.0  3500  2023-03-22
0  101  Nueva York  3 . ..   750000.0  1800  2023-05-15
1  102  San Francisco  2 . ..   850000.0  1400  2023-06-01

Ordenar por Dormitorios (Ascendente) y Precio (Descendente):

  PropertyID Ubicación Dormitorios ...      Precio MetrosCuadrados Fecha
1 102 San Francisco 2...  850000.0 1400 2023-06-01
0 101 Nueva York 3...  750000.0 1800 2023-05-15
3 104 Chicago 3...  650000.0 1700 NaN
5 106 Houston 4...  450000.0 2000 2023-07-01
2 103 Los Ángeles 4...        NaN 2500 2023-04-10
4 105 Miami 5... 1200000.0 3500 2023-03-22

10. apply(): Aplicar funciones personalizadas a los datos

La función apply() permite aplicar funciones personalizadas a filas o columnas de un DataFrame. Es un método potente para realizar transformaciones de elementos, cálculos u operaciones condicionales que van más allá de las funciones integradas de Pandas.

Ejemplo de código:

Veamos un ejemplo en el que queremos crear una nueva columna para calcular el precio por pie cuadrado.

# Define una función personalizada para calcular el precio por pie cuadrado
def precio_por_pie_cuadrado(precio, pie_cuadrado):
  return precio / pie cuadrado if pie cuadrado != 0 else 0

# Aplica la función personalizada para crear una nueva columna
df['PrecioPorPieCuadrado'] = df.apply(lambda fila: precio_por_pieCuadrado(fila['Precio'], fila['PiesCuadrados']), eje=1)
print(df)

Este es el resultado del código anterior:

  PropertyID Ubicación Dormitorios ...  MetrosCuadrados FechaPrecioPorPieCuadrado
0 101 Nueva York 3...          1800 2023-05-15 416.666667
1 102 San Francisco 2...          1400 2023-06-01 607.142857
2 103 Los Ángeles 4... 2500 2023-04-10 NaN
3 104 Chicago 3...          1700 NaN 382.352941
4 105 Miami 5...          3500 2023-03-22 342.857143
5 106 Houston 4... 2000 2023-07-01 225.000000

Otro ejemplo podría ser convertir los nombres de los lugares en mayúsculas;

# Aplica una transformación para poner en mayúsculas todos los nombres de ubicación
 df['Localización'] = df['Localización'].apply(lambda x: x.upper())
print(df)

Esto es lo que parece:

   PropertyID Ubicación Dormitorios ...      Precio MetrosCuadrados FechaCalificación
0 101 NUEVA YORK 3...  750000.0 1800 2023-05-15
1 102 SAN FRANCISCO 2...  850000.0 1400 2023-06-01
2 103 LOS ANGELES 4...        NaN 2500 2023-04-10
3 104 CHICAGO 3...  650000,0 1700 NaN
4 105 MIAMI 5... 1200000.0 3500 2023-03-22
5 106 HOUSTON 4...  450000.0 2000 2023-07-01

Conclusión

En esta guía, exploramos 10 funciones esenciales de Pandas para el análisis de datos, desde la carga e inspección de datos con read_csv() y info() a limpiarla y transformarla con métodos como isnull(), fillna()y aplicar(). Estas funciones constituyen la base de cualquier flujo de trabajo de análisis de datos, ya que le permiten limpiar, manipular y resumir conjuntos de datos de forma eficaz. Dominarlas le preparará para enfrentarse con confianza a los retos que plantean los datos en el mundo real. Empiece a practicar hoy mismo y descubra cómo estas herramientas pueden simplificar sus tareas de análisis.