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.

¿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.
¿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, mesMy añoY
## 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] |

