Python Tutorial de Pandas: DataFrame, rango de fechas y uso

⚡ Resumen inteligente

Pandas es el framework de código abierto Python Biblioteca para manipular datos tabulares. Proporciona las estructuras Series y DataFrame, rangos de fechas, funciones de ayuda para la inspección y las operaciones de segmentación, eliminación, concatenación, ordenación y cambio de nombre que se muestran a lo largo de este tutorial.

  • 🔘 Desarrollado sobre NumPy: Pandas requiere NumPy, que proporciona los arrays que hay detrás de cada Series y DataFrame.
  • ☑️ Dos estructuras: Una serie almacena una dimensión etiquetada; un DataFrame almacena filas y columnas de tipos mixtos.
  • Rangos de fechas: pd.date_range() crea un índice a partir de una fecha de inicio, un número de períodos y una frecuencia.
  • 🧪 Inspeccione primero: Las funciones head(), tail() y describe() revelan la forma, la dispersión y los percentiles antes de cualquier análisis.
  • 🛠️ Cortar con precisión: Los nombres de los corchetes seleccionan las columnas, loc selecciona por etiqueta e iloc selecciona por posición.
  • ⚠️ Nota de versión: El alias de frecuencia M está obsoleto desde Pandas 2.2; las versiones actuales esperan ME.

Python Tutorial de Pandas: DataFrame, rango de fechas y uso de Pandas

¿Qué es Pandas en Python?

pandas es una biblioteca de código abierto que le permite realizar manipulación y análisis de datos en Python, que abarca tablas numéricas y series temporales por igual. Proporciona una manera fácil de crear, manipular y organizar datos, y está construido sobre la base de NumPyPor lo tanto, NumPy debe estar presente para que Pandas funcione.

¿Por qué utilizar Pandas?

Los científicos de datos utilizan Pandas en Python por las siguientes ventajas:

  • Maneja fácilmente los datos faltantes
  • Utiliza Series para datos unidimensionales y DataFrame para datos multidimensionales.
  • Proporciona una manera eficiente de dividir los datos.
  • Proporciona una forma flexible de fusionar, concatenar o remodelar los datos.
  • Incluye un potente conjunto de herramientas para series temporales.

En resumen, Pandas proporciona estructuras de datos potentes y fáciles de usar, además de los medios para operar con ellas rápidamente, razón por la cual es la base de la mayoría de Python análisis de los datos extra.

Cómo instalar Pandas

Pandas viene incluido con Anaconda y con la mayoría de los servicios de notebooks administrados, por lo que normalmente ya está instalado. Si la importación falla, uno de los comandos a continuación lo agrega. El entorno construido en Cómo instalar TensorFlow También contiene pandas.

  • pepita: pip install pandas
  • Anaconda: conda install -c anaconda pandas
  • Dentro de una Jupyter Notebook celda:
import sys
!conda install --yes --prefix {sys.prefix} pandas

¿Qué es un marco de datos de Pandas?

Un DataFrame de Pandas es una estructura de datos bidimensional etiquetada cuyas columnas pueden contener diferentes tipos. Es la forma estándar de almacenar datos en formato tabular: las filas contienen las observaciones y las columnas nombran la información. Por ejemplo, Precio puede ser el nombre de una columna y 2, 3, 4 pueden ser los valores de precio.

Los marcos de datos son bien conocidos por los estadísticos y otros profesionales del análisis de datos. La imagen a continuación muestra esa estructura: un índice de filas etiquetadas en el lateral y columnas con nombre en la parte superior.

Diseño de un DataFrame de Pandas con un índice de fila etiquetado y columnas con nombre.

¿Qué es una serie?

Una Serie es una estructura de datos unidimensional. Puede contener cualquier tipo de dato, como enteros, números de coma flotante o cadenas de texto, y resulta útil para realizar cálculos o devolver una matriz unidimensional. Por definición, una Serie no puede tener varias columnas; para ello, utilice la estructura DataFrame.

El constructor de Pandas Series acepta los siguientes parámetros:

  • Fecha: puede ser una lista, un diccionario o un valor escalar
pd.Series([1., 2., 3.])
0    1.0
1    2.0
2    3.0
dtype: float64

Puedes agregar un índice con indexNombra las filas y su longitud debe ser igual al tamaño de la columna.

pd.Series([1., 2., 3.], index=['a', 'b', 'c'])

A continuación, crea una Serie Pandas con un valor faltante en la tercera fila. Valores faltantes en Python se muestran como NaN, y np.nan NumPy crea uno artificialmente.

pd.Series([1,2,np.nan])

Resultado

0    1.0
1    2.0
2    NaN
dtype: float64

Crear marco de datos de Pandas

Puedes convertir una matriz NumPy en un DataFrame con pd.DataFrame(). También es posible lo contrario: para convertir un DataFrame de nuevo en una matriz, utilice np.array(), o df.to_numpy(), que es lo que recomienda la documentación actual de Pandas.

## Numpy to pandas
import numpy as np
h = [[1,2],[3,4]] 
df_h = pd.DataFrame(h)
print('Data Frame:', df_h)

## Pandas to numpy
df_h_n = np.array(df_h)
print('Numpy array:', df_h_n)
Data Frame:    0  1
0  1  2
1  3  4
Numpy array: [[1 2]
 [3 4]]

Un diccionario funciona igual de bien que una entrada para pd.DataFrame().

dic = {'Name': ["John", "Smith"], 'Age': [30, 40]}
pd.DataFrame(data=dic)
Edad Nombre
0 30 Juan
1 40 Smith

Datos de distribución de pandas

Pandas cuenta con una API práctica para crear un rango de fechas, que se convierte en el índice de una serie temporal. La llamada tiene este formato:

pd.date_range(start, periods, freq):

  • El primer parámetro es la fecha de inicio.
  • El segundo parámetro es el número de períodos (opcional si se especifica la fecha de finalización)
  • El último parámetro es la frecuencia: día D, mes M y año Y
## Create date
# Days
dates_d = pd.date_range('20300101', periods=6, freq='D')
print('Day:', dates_d)

Resultado

Day: DatetimeIndex(['2030-01-01', '2030-01-02', '2030-01-03', '2030-01-04', '2030-01-05', '2030-01-06'], dtype='datetime64[ns]', freq='D')
# Months
dates_m = pd.date_range('20300101', periods=6, freq='M')
print('Month:', dates_m)

Resultado

Month: DatetimeIndex(['2030-01-31', '2030-02-28', '2030-03-31', '2030-04-30','2030-05-31', '2030-06-30'], dtype='datetime64[ns]', freq='M')

Nota de versión: el mes alias M El uso anterior está obsoleto desde Pandas 2.2 y se eliminó en Pandas 3.0. En las versiones actuales pasa freq='ME' para fin de mes; el índice resultante es idéntico.

Inspeccionar datos

Puedes comprobar el inicio o el final de un conjunto de datos con head() or tail() Se llama al DataFrame, como muestra el ejemplo de Pandas a continuación.

Paso 1) Crea una secuencia aleatoria con NumPy. La secuencia tiene 4 columnas y 6 filas.

random = np.random.randn(6,4)

Paso 2) Luego, creas un DataFrame usando Pandas.

Usar dates_m como índice, por lo que a cada fila se le da un nombre que corresponde a una fecha, y se nombran las 4 columnas con el columns argumento.

# Create data with date
df = pd.DataFrame(random,
                  index=dates_m,
                  columns=list('ABCD'))

Gracias np.random.randn() Si se ejecuta sin semilla, sus cifras diferirán de las que se muestran aquí. Llame np.random.seed(0) Primero, si quieres reproducir un conjunto fijo.

Paso 3) Utilizando la función de cabeza

df.head(3)
A B C D
2030-01-31 1.139433 1.318510 -0.181334 1.615822
2030-02-28 -0.081995 -0.063582 0.857751 -0.527374
2030-03-31 -0.519179 0.080984 -1.454334 1.314947

Paso 4) Usando la función de cola

df.tail(3)
A B C D
2030-04-30 -0.685448 -0.011736 0.622172 0.104993
2030-05-31 -0.935888 -0.731787 -0.558729 0.768774
2030-06-30 1.096981 0.949180 -0.196901 -0.471556

Paso 5) Una excelente manera de obtener una pista sobre los datos es describe()Informa sobre el recuento, la media, la desviación estándar, el mínimo, el máximo y los percentiles del conjunto de datos.

df.describe()
A B C D
contar 6.000000 6.000000 6.000000 6.000000
mean 0.002317 0.256928 -0.151896 0.467601
enfermedades de transmisión sexual 0.908145 0.746939 0.834664 0.908910
min -0.935888 -0.731787 -1.454334 -0.527374
25% -0.643880 -0.050621 -0.468272 -0.327419
50% -0.300587 0.034624 -0.189118 0.436883
75% 0.802237 0.732131 0.421296 1.178404
max 1.139433 1.318510 0.857751 1.615822

Datos de corte

El seccionamiento extrae un subconjunto de filas o columnas de un DataFrame. Puede usar el nombre de la columna para, por ejemplo,tracen una columna, como muestra el ejemplo de Pandas a continuación.

## Slice
### Using name
df['A']

2030-01-31   -0.168655
2030-02-28    0.689585
2030-03-31    0.767534
2030-04-30    0.557299
2030-05-31   -1.547836
2030-06-30    0.511551
Freq: M, Name: A, dtype: float64

Para seleccionar varias columnas necesita un corchete doble, [[..,..]]El primer par indica que desea seleccionar columnas; el segundo par indica qué columnas se deben devolver.

df[['A', 'B']]
A B
2030-01-31 -0.168655 0.587590
2030-02-28 0.689585 0.998266
2030-03-31 0.767534 -0.940617
2030-04-30 0.557299 0.507350
2030-05-31 -1.547836 1.276558
2030-06-30 0.511551 1.572085

Puedes segmentar las filas con dos puntos. El código siguiente devuelve las tres primeras filas.

### using a slice for row
df[0:3]
A B C D
2030-01-31 -0.168655 0.587590 0.572301 -0.031827
2030-02-28 0.689585 0.998266 1.164690 0.475975
2030-03-31 0.767534 -0.940617 0.227255 -0.341532

El loc El accesor selecciona las columnas por nombre. Como es habitual, el valor anterior a la coma representa las filas y el valor posterior las columnas; se necesitan corchetes para seleccionar más de una columna.

## Multi col
df.loc[:,['A','B']]
A B
2030-01-31 -0.168655 0.587590
2030-02-28 0.689585 0.998266
2030-03-31 0.767534 -0.940617
2030-04-30 0.557299 0.507350
2030-05-31 -1.547836 1.276558
2030-06-30 0.511551 1.572085

Existe otro método para seleccionar varias filas y columnas. iloc[] utiliza posiciones enteras en lugar de nombres de columna, por lo que el código siguiente devuelve el mismo DataFrame que el anterior.

df.iloc[:, :2]
A B
2030-01-31 -0.168655 0.587590
2030-02-28 0.689585 0.998266
2030-03-31 0.767534 -0.940617
2030-04-30 0.557299 0.507350
2030-05-31 -1.547836 1.276558
2030-06-30 0.511551 1.572085

Soltar una columna

Puedes eliminar columnas con df.drop(), pasando los nombres en el columns argumento.

df.drop(columns=['A', 'C'])
B D
2030-01-31 0.587590 -0.031827
2030-02-28 0.998266 0.475975
2030-03-31 -0.940617 -0.341532
2030-04-30 0.507350 -0.296035
2030-05-31 1.276558 0.523017
2030-06-30 1.572085 -0.594772

Concatenación

Puedes concatenar dos DataFrames con pd.concat()Primero, crea los dos marcos.

import numpy as np
df1 = pd.DataFrame({'name': ['John', 'Smith','Paul'],
                     'Age': ['25', '30', '50']},
                    index=[0, 1, 2])
df2 = pd.DataFrame({'name': ['Adam', 'Smith' ],
                     'Age': ['26', '11']},
                    index=[3, 4])  

Luego, concatenalos.

df_concat = pd.concat([df1,df2]) 
df_concat
Edad nombre
0 25 Juan
1 30 Smith
2 50 Paul
3 26 Adam
4 11 Smith

Eliminar duplicados

Cuando un conjunto de datos contiene información duplicada, drop_duplicates() es una forma sencilla de excluir las filas repetidas. df_concat contiene una observación duplicada: Smith aparece dos veces en el name columna.

df_concat.drop_duplicates('name')
Edad nombre
0 25 Juan
1 30 Smith
2 50 Paul
3 26 Adam

Valores de ordenación

Puedes ordenar un marco con sort_values(). Tenga en cuenta que Age se creó como texto aquí, por lo que las filas se ordenan en orden de cadena.

df_concat.sort_values('Age')
Edad nombre
4 11 Smith
0 25 Juan
3 26 Adam
1 30 Smith
2 50 Paul

Cambiar nombre de columnas

Usar rename() Para renombrar una columna en Pandas. En cada par, el primer valor es el nombre actual de la columna y el segundo es el nuevo.

df_concat.rename(columns={"name": "Surname", "Age": "Age_ppl"})
Edad_personas Apellido
0 25 Juan
1 30 Smith
2 50 Paul
3 26 Adam
4 11 Smith

Referencia rápida de los métodos de Pandas

Esta tabla relaciona cada tarea común con el método de Pandas que la realiza.

Task Método
datos de importacion leer_csv
crear serie Serie
Crear marco de datos Marco de datos
Crear rango de fechas rango de fechas
cabeza de retorno cabeza
cola de retorno cola
Describir describir
rebanada usando nombre nombre de datos ['nombre de columna']
Cortar usando filas nombre_datos[0:5]

Preguntas Frecuentes

Llame hoy al pd.read_csv() con un camino o URLAgregue nombres para etiquetar las columnas, use `sep` para un delimitador diferente y `usecols` para conservar solo las columnas que necesita.

La función isnull() las marca, dropna() elimina las filas o columnas afectadas y fillna() las sustituye por una constante o una estadística, como la media de la columna. Las entradas faltantes se imprimen como NaN.

La función groupby() divide las filas en grupos según una columna clave, aplica una agregación como recuento, suma o media a cada grupo y, a continuación, combina los resultados en un nuevo marco.

Construye una máscara booleana y pásala entre corchetes, por ejemplo df[df.Age == 30]. Combina máscaras con los operadores de ampersand y tubería, envuelveping Cada comparación entre paréntesis.

pd.merge() compara filas en una columna clave de la forma en que SQL join lo hace, con how configurado a inner, left, right o outer. concat() apila marcos en lugar de hacer coincidir claves.

df.to_csv('out.csv', index=False) escribe un archivo de comas, y df.to_excel('out.xlsx') escribe una hoja de cálculo. Eliminarping El índice evita que la primera columna quede sin nombre en la siguiente lectura.

Los asistentes de IA analizan un nuevo marco de datos, proponen las llamadas a las funciones `describe`, `groupby` y `plot` que conviene ejecutar, e identifican las columnas con tipos de datos inusuales o muchos valores nulos. Confirma cada sugerencia con los datos originales.

Sí. Copiloto de GitHub completa un comentario simple en código Pandas funcional en un Jupyter célula. RevRevise los tipos de datos y el número de filas antes de confiar en el resultado.

Resumir este post con: