#immportacion modulos
import pandas as pd
import numpy as npEn este cuaderno veremos los elementos y funciones básicas de la librería Pandas. Los contenidos específicos son:
- Que es Pandas.
- Dónde encontrar datos.
- Carga de Datos.
- DataFrames.
- Revisando los datos.
- Selección de datos por etiqueta.
- Selección de datos por posición.
1 ¿Qué es Pandas?
Pandas es una librería de Python con la que puedes trabajar con datos tabulados. Es muy útil para limpiar, analizar y procesar datos.
De acuerdo con Wikipedia: “(…) extensión de NumPy para manipulación y análisis de datos para el lenguaje de programación Python. En particular, ofrece estructuras de datos y operaciones para manipular tablas numéricas y series temporales.”
2 ¿Dónde encontrar datos?
En internet existen repositorios de datos abiertos de los que puedes descargar datasets. Algunos ejemplos:
- Kaggle: Sitio web para prácticar y aprender sobre ciencia de datos y machine learning.
- UC Irvine Machine Learning Repository: En este repositorio hay más de 500 datasets de diversos temas. Usualmente son útiles para practicar y aprender sobre machine learning.
- Catálogo de Datos Abiertos Datos abiertos del Ecuador. . . .
Existe una gran cantidad de datasets disponibles con los que puedes trabajar.
3 Carga de Datos.
Con Pandas puedes cargar datos de archivos externos. por lo general son datos tabulados. Los más comunes son archivos CSV, xlsx (Excel).
# Para importar un archivo csv
datos = pd.read_csv('dataset.csv' , sep=";")C:\Users\meagu\AppData\Local\Temp\ipykernel_25952\3482028259.py:2: DtypeWarning: Columns (5,7) have mixed types. Specify dtype option on import or set low_memory=False.
datos = pd.read_csv('dataset.csv' , sep=";")
datos.info()<class 'pandas.core.frame.DataFrame'>
RangeIndex: 50545 entries, 0 to 50544
Data columns (total 78 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 ciclo 50545 non-null object
1 grado 50545 non-null int64
2 estado_eval 50545 non-null int64
3 codigo 50545 non-null object
4 amie 50545 non-null object
5 nm_regi 50545 non-null object
6 es_regeva 50545 non-null int64
7 id_zona 50545 non-null object
8 id_dist 50545 non-null object
9 id_prov 50545 non-null int64
10 id_cant 50545 non-null int64
11 id_parr 50545 non-null int64
12 financiamiento 50545 non-null int64
13 sostenimiento 50545 non-null int64
14 tp_sexo 50545 non-null int64
15 na_eano 50545 non-null int64
16 tp_area 50545 non-null int64
17 etnibee 50545 non-null object
18 isec 50545 non-null object
19 quintil 50545 non-null object
20 fex_inev 50545 non-null object
21 inev 50545 non-null object
22 fex_imat 50545 non-null object
23 imat 50545 non-null object
24 fex_ilyl 50545 non-null object
25 ilyl 50545 non-null object
26 fex_icn 50545 non-null object
27 icn 50545 non-null object
28 fex_ifis 50545 non-null object
29 ifis 50545 non-null object
30 fex_iqui 50545 non-null object
31 iqui 50545 non-null object
32 fex_ibio 50545 non-null object
33 ibio 50545 non-null object
34 fex_ies 50545 non-null object
35 ies 50545 non-null object
36 fex_ihis 50545 non-null object
37 ihis 50545 non-null object
38 fex_ifil 50545 non-null object
39 ifil 50545 non-null object
40 fex_ied 50545 non-null object
41 ied 50545 non-null object
42 nl_imat 50545 non-null object
43 nl_ilyl 50545 non-null object
44 nl_icn 50545 non-null object
45 nl_ifis 50545 non-null object
46 nl_iqui 50545 non-null object
47 nl_ibio 50545 non-null object
48 nl_ies 50545 non-null object
49 nl_ihis 50545 non-null object
50 nl_ifil 50545 non-null object
51 nl_ied 50545 non-null object
52 ind_1 50545 non-null object
53 ind_2 50545 non-null object
54 ind_3 50545 non-null object
55 ind_4 50545 non-null object
56 ind_5 50545 non-null object
57 ind_6 50545 non-null object
58 ind_7 50545 non-null object
59 ind_8 50545 non-null object
60 ind_9 50545 non-null object
61 lc_1 50545 non-null object
62 lc_2 50545 non-null object
63 lc_3 50545 non-null object
64 lc_4 50545 non-null object
65 lc_5 50545 non-null object
66 lc_6 50545 non-null object
67 lc_7 50545 non-null object
68 lc_8 50545 non-null object
69 lc_9 50545 non-null object
70 lc_10 50545 non-null object
71 lc_11 50545 non-null object
72 lc_12 50545 non-null object
73 fex_rubrica 50545 non-null object
74 estado_rub 50545 non-null object
75 fex_lista_cotejo 50545 non-null object
76 estado_lc 50545 non-null object
77 fex_honestidad_academica 50545 non-null object
dtypes: int64(11), object(67)
memory usage: 30.1+ MB
datos.to_excel("excel.xlsx")# Para importar un archivo de excel
datos_excel = pd.read_excel('excel.xlsx')# Importamos un archivo
datos = pd.read_csv('dataset.csv' , sep=";")
# Podemos ver el inicio de un DataFrame con .head()
datos.columnsC:\Users\meagu\AppData\Local\Temp\ipykernel_25952\1594173510.py:2: DtypeWarning: Columns (5,7) have mixed types. Specify dtype option on import or set low_memory=False.
datos = pd.read_csv('dataset.csv' , sep=";")
Index(['ciclo', 'grado', 'estado_eval', 'codigo', 'amie', 'nm_regi',
'es_regeva', 'id_zona', 'id_dist', 'id_prov', 'id_cant', 'id_parr',
'financiamiento', 'sostenimiento', 'tp_sexo', 'na_eano', 'tp_area',
'etnibee', 'isec', 'quintil', 'fex_inev', 'inev', 'fex_imat', 'imat',
'fex_ilyl', 'ilyl', 'fex_icn', 'icn', 'fex_ifis', 'ifis', 'fex_iqui',
'iqui', 'fex_ibio', 'ibio', 'fex_ies', 'ies', 'fex_ihis', 'ihis',
'fex_ifil', 'ifil', 'fex_ied', 'ied', 'nl_imat', 'nl_ilyl', 'nl_icn',
'nl_ifis', 'nl_iqui', 'nl_ibio', 'nl_ies', 'nl_ihis', 'nl_ifil',
'nl_ied', 'ind_1', 'ind_2', 'ind_3', 'ind_4', 'ind_5', 'ind_6', 'ind_7',
'ind_8', 'ind_9', 'lc_1', 'lc_2', 'lc_3', 'lc_4', 'lc_5', 'lc_6',
'lc_7', 'lc_8', 'lc_9', 'lc_10', 'lc_11', 'lc_12', 'fex_rubrica',
'estado_rub', 'fex_lista_cotejo', 'estado_lc',
'fex_honestidad_academica'],
dtype='object')
4 DataFrames.
Como ya mencionamos, una Series se puede entender como una tabla con una sola columna, aunque también puedes verla como una lista donde cada elemento tiene una etiqueta, un índice el cual por default es un número entero de la posición del elemento.
Para crear una serie partiendo de una lista:
serie = pd.Series(['caracteres', 3.1416, True])
# Imprimimos la serie que creamos
print(serie)
# Información de la serie
print("\nTipo de dato: ", type(serie))
print("Tamaño: ", serie.size)0 caracteres
1 3.1416
2 True
dtype: object
Tipo de dato: <class 'pandas.core.series.Series'>
Tamaño: 3
Observamos cómo cada elemento de la lista ahora tiene un índice. Podemos especificar el índice explícitamente:
serie = pd.Series(data = ['caracteres', 3.1416, True],
index = ['1', '2', '3'])
print(serie)
# Podemos obtener un elemento con su índice
print(serie['Elemento 1'])Elemento 1 caracteres
Elemento 2 3.1416
Elemento 2 True
dtype: object
caracteres
Los DataFrames son más complejos que las Series, ya que ahora tenemos una tabla con varias columnas. En este caso, tendremos índices para cada fila y también etiquetas para las columnas. Los valores default son también enteros que indican la posición.
# Creemos DataFrame con una matriz aleatoria.
df = pd.DataFrame(data = np.random.rand(4, 4))
print("Tipo: ", type(df)) # Tipo de objeto
print("Tamaño: ", df.size) #El tamaño es igual al número de celdas
print("Tamaño: ", df.info())
df # Visualizamos el DataFrame completoTipo: <class 'pandas.core.frame.DataFrame'>
Tamaño: 16
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4 entries, 0 to 3
Data columns (total 4 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 0 4 non-null float64
1 1 4 non-null float64
2 2 4 non-null float64
3 3 4 non-null float64
dtypes: float64(4)
memory usage: 260.0 bytes
Tamaño: None
| 0 | 1 | 2 | 3 | |
|---|---|---|---|---|
| 0 | 0.313387 | 0.897866 | 0.445509 | 0.413369 |
| 1 | 0.584700 | 0.398930 | 0.613012 | 0.103134 |
| 2 | 0.201942 | 0.184334 | 0.419727 | 0.610008 |
| 3 | 0.673399 | 0.149493 | 0.660942 | 0.542672 |
# Podemos crear DataFrames a partir de diccionarios
df_dict = pd.DataFrame({
'Nombre':['Marco', 'Esteban', 'Antonio'],
'Edad':[32, 40, 1534],
'Altura':[1.82, 1.60, 1.50],},
index = ['Persona 1', 'Persona 2', 'Persona 3']) # Especificamos índice
df_dict| Nombre | Edad | Altura | |
|---|---|---|---|
| Persona 1 | Marco | 32 | 1.82 |
| Persona 2 | Esteban | 40 | 1.60 |
| Persona 3 | Antonio | 1534 | 1.50 |
Ejercicio: - Crea un DataFrame con una matriz de unos con dimensión (4, 3) - Asigna números enteros pares como índice. - Asigna letras como columnas.
#
da = [1,1,1]
#ky = { for x in []}
df_dict = pd.DataFrame({
'a':[1,1,1],
'b':da,
'c':da,
'd':da,
},
index = [2,4,6]) # Especificamos índice
df_dict| a | b | c | d | |
|---|---|---|---|---|
| 2 | 1 | 1 | 1 | 1 |
| 4 | 1 | 1 | 1 | 1 |
| 6 | 1 | 1 | 1 | 1 |
5 Revisando los datos.
Para visualizar los datos de un DataFrame, tenemos dos opciones:
# Mostramos las primeras 7 filas.
df.head(n = 7)
# Mostramos las últimas 4 filas.
df.tail(n = 4)Si queremos ver un DataFrame completo, lo ponemos solo en una celda.
# Para ver todo el DataFrame
dfdata = pd.read_csv("dataset.csv" , sep=";")C:\Users\meagu\AppData\Local\Temp\ipykernel_25952\1555053127.py:1: DtypeWarning: Columns (5,7) have mixed types. Specify dtype option on import or set low_memory=False.
data = pd.read_csv("dataset.csv" , sep=";")
data.head(n = 3)| ciclo | grado | estado_eval | codigo | amie | nm_regi | es_regeva | id_zona | id_dist | id_prov | ... | lc_8 | lc_9 | lc_10 | lc_11 | lc_12 | fex_rubrica | estado_rub | fex_lista_cotejo | estado_lc | fex_honestidad_academica | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 2023-2024 | 10 | 2 | 0BY3566978 | 01H00655 | 2 | 1 | 6 | 01D02 | 1 | ... | 24,31269711 | 2 | 2 | 20,73730047 | ||||||
| 1 | 2023-2024 | 10 | 2 | 0EYB576428 | 01H00655 | 2 | 1 | 6 | 01D02 | 1 | ... | 24,31269711 | 2 | 2 | 20,73730047 | ||||||
| 2 | 2023-2024 | 10 | 2 | 0LXC578175 | 01H00655 | 2 | 1 | 6 | 01D02 | 1 | ... | 24,31269711 | 2 | 2 | 20,73730047 |
3 rows × 78 columns
data.tail(n = 4)| ciclo | grado | estado_eval | codigo | amie | nm_regi | es_regeva | id_zona | id_dist | id_prov | ... | lc_8 | lc_9 | lc_10 | lc_11 | lc_12 | fex_rubrica | estado_rub | fex_lista_cotejo | estado_lc | fex_honestidad_academica | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 50541 | 2023-2024 | 4 | 2 | LQZJ544557 | 22H00530 | 3 | 2 | 2 | 22D02 | 22 | ... | 0 | 0 | 0 | 0 | 0 | 19,12987428 | 2 | 15,30389943 | 2 | |
| 50542 | 2023-2024 | 4 | 2 | P33E565302 | 22H00530 | 3 | 2 | 2 | 22D02 | 22 | ... | 0 | 0 | 0 | 0 | 0 | 19,12987428 | 2 | 15,30389943 | 2 | |
| 50543 | 2023-2024 | 4 | 2 | PLBA561287 | 22H00530 | 3 | 2 | 2 | 22D02 | 22 | ... | 0 | 0 | 0 | 0 | 0 | 19,12987428 | 2 | 15,30389943 | 2 | |
| 50544 | 2023-2024 | 4 | 2 | PS7V552528 | 22H00530 | 3 | 2 | 2 | 22D02 | 22 | ... | 0 | 0 | 0 | 0 | 0 | 19,12987428 | 2 | 15,30389943 | 2 |
4 rows × 78 columns
Además de consultar partes del DataFrame, también podemos consultar las etiquetas en las filas y las columnas, así como todos los valores del DataFrame.
df = data
columnas = df.columns # Obtenemos columnas
indice = df.index # Obtenemos filas
valores = df.values # Obtenemos valoresVeamos un ejemplo de esto:
columnas = df_dict.columns
filas = df_dict.index
valores = df_dict.values
print('Columnas: ', columnas, '\nFilas: ', filas)
print(valores, type(valores)) # Los valores son una matriz de NumPy!!
df_dict # Recordamos el DataFrame de donde obtenemos estos valoresColumnas: Index(['a', 'b', 'c', 'd'], dtype='object')
Filas: Index([2, 4, 6], dtype='int64')
[[1 1 1 1]
[1 1 1 1]
[1 1 1 1]] <class 'numpy.ndarray'>
| a | b | c | d | |
|---|---|---|---|---|
| 2 | 1 | 1 | 1 | 1 |
| 4 | 1 | 1 | 1 | 1 |
| 6 | 1 | 1 | 1 | 1 |
Finalmente, cuando tenemos un conjunto de datos, nos será útil hacer un análisis inicial (exploratorio) de los datos.
# Describimos en general el DataFrame
df.describe()Por ejemplo, obtenemos una descripción del DataFrame de la densidad poblacional:
# Recordamos el DataFrame de donde obtenemos estos valores
data.describe()| grado | estado_eval | es_regeva | id_prov | id_cant | id_parr | financiamiento | sostenimiento | tp_sexo | na_eano | tp_area | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| count | 50545.000000 | 50545.000000 | 50545.000000 | 50545.000000 | 50545.000000 | 50545.000000 | 50545.000000 | 50545.000000 | 50545.000000 | 50545.000000 | 50545.000000 |
| mean | 6.034781 | 1.969275 | 1.514255 | 12.869720 | 1290.180552 | 129050.093303 | 1.704541 | 2.758987 | 1.501316 | 2010.339717 | 1.644653 |
| std | 2.728360 | 0.172574 | 0.499802 | 7.191719 | 718.664646 | 71870.803082 | 0.805489 | 1.230177 | 0.500003 | 3.325834 | 0.478623 |
| min | 3.000000 | 1.000000 | 1.000000 | 1.000000 | 101.000000 | 10101.000000 | 1.000000 | 1.000000 | 1.000000 | 2000.000000 | 1.000000 |
| 25% | 4.000000 | 2.000000 | 1.000000 | 9.000000 | 901.000000 | 90112.000000 | 1.000000 | 1.000000 | 1.000000 | 2008.000000 | 1.000000 |
| 50% | 7.000000 | 2.000000 | 2.000000 | 12.000000 | 1213.000000 | 121350.000000 | 1.000000 | 3.000000 | 2.000000 | 2011.000000 | 2.000000 |
| 75% | 10.000000 | 2.000000 | 2.000000 | 17.000000 | 1701.000000 | 170155.000000 | 2.000000 | 4.000000 | 2.000000 | 2013.000000 | 2.000000 |
| max | 10.000000 | 2.000000 | 2.000000 | 90.000000 | 9004.000000 | 900451.000000 | 3.000000 | 4.000000 | 2.000000 | 2016.000000 | 2.000000 |
data.info()<class 'pandas.core.frame.DataFrame'>
RangeIndex: 50545 entries, 0 to 50544
Data columns (total 78 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 ciclo 50545 non-null object
1 grado 50545 non-null int64
2 estado_eval 50545 non-null int64
3 codigo 50545 non-null object
4 amie 50545 non-null object
5 nm_regi 50545 non-null object
6 es_regeva 50545 non-null int64
7 id_zona 50545 non-null object
8 id_dist 50545 non-null object
9 id_prov 50545 non-null int64
10 id_cant 50545 non-null int64
11 id_parr 50545 non-null int64
12 financiamiento 50545 non-null int64
13 sostenimiento 50545 non-null int64
14 tp_sexo 50545 non-null int64
15 na_eano 50545 non-null int64
16 tp_area 50545 non-null int64
17 etnibee 50545 non-null object
18 isec 50545 non-null object
19 quintil 50545 non-null object
20 fex_inev 50545 non-null object
21 inev 50545 non-null object
22 fex_imat 50545 non-null object
23 imat 50545 non-null object
24 fex_ilyl 50545 non-null object
25 ilyl 50545 non-null object
26 fex_icn 50545 non-null object
27 icn 50545 non-null object
28 fex_ifis 50545 non-null object
29 ifis 50545 non-null object
30 fex_iqui 50545 non-null object
31 iqui 50545 non-null object
32 fex_ibio 50545 non-null object
33 ibio 50545 non-null object
34 fex_ies 50545 non-null object
35 ies 50545 non-null object
36 fex_ihis 50545 non-null object
37 ihis 50545 non-null object
38 fex_ifil 50545 non-null object
39 ifil 50545 non-null object
40 fex_ied 50545 non-null object
41 ied 50545 non-null object
42 nl_imat 50545 non-null object
43 nl_ilyl 50545 non-null object
44 nl_icn 50545 non-null object
45 nl_ifis 50545 non-null object
46 nl_iqui 50545 non-null object
47 nl_ibio 50545 non-null object
48 nl_ies 50545 non-null object
49 nl_ihis 50545 non-null object
50 nl_ifil 50545 non-null object
51 nl_ied 50545 non-null object
52 ind_1 50545 non-null object
53 ind_2 50545 non-null object
54 ind_3 50545 non-null object
55 ind_4 50545 non-null object
56 ind_5 50545 non-null object
57 ind_6 50545 non-null object
58 ind_7 50545 non-null object
59 ind_8 50545 non-null object
60 ind_9 50545 non-null object
61 lc_1 50545 non-null object
62 lc_2 50545 non-null object
63 lc_3 50545 non-null object
64 lc_4 50545 non-null object
65 lc_5 50545 non-null object
66 lc_6 50545 non-null object
67 lc_7 50545 non-null object
68 lc_8 50545 non-null object
69 lc_9 50545 non-null object
70 lc_10 50545 non-null object
71 lc_11 50545 non-null object
72 lc_12 50545 non-null object
73 fex_rubrica 50545 non-null object
74 estado_rub 50545 non-null object
75 fex_lista_cotejo 50545 non-null object
76 estado_lc 50545 non-null object
77 fex_honestidad_academica 50545 non-null object
dtypes: int64(11), object(67)
memory usage: 30.1+ MB
6 Selección de datos.
Podemos seleccionar una o varias columnas específicas de un DataFrame utilizando las etiquetas. Se crea un nuevo DataFrame con las columnas especificadas.
De manera similar, podemos seleccionar filas utilizando el índice. Podemos seleccionar una o varias filas y se crea también un nuevo DataFrame
Para seleccionar utilizando las etiquetas (nombres de filas y columnas) usamos el método loc(). Funciona como sigue:
df = data
# Seleccionamos una sola columna.
serie_columna = df.loc[:, ['Columna1']]
# Seleccionamos más de una columna.
df_columnas = df.loc[:, ['Columna1','Columna2']]
# Seleccionamos más de una fila.
df_filas = df.loc[['Indice1', 'Indice2'], :]data.columnsIndex(['ciclo', 'grado', 'estado_eval', 'codigo', 'amie', 'nm_regi',
'es_regeva', 'id_zona', 'id_dist', 'id_prov', 'id_cant', 'id_parr',
'financiamiento', 'sostenimiento', 'tp_sexo', 'na_eano', 'tp_area',
'etnibee', 'isec', 'quintil', 'fex_inev', 'inev', 'fex_imat', 'imat',
'fex_ilyl', 'ilyl', 'fex_icn', 'icn', 'fex_ifis', 'ifis', 'fex_iqui',
'iqui', 'fex_ibio', 'ibio', 'fex_ies', 'ies', 'fex_ihis', 'ihis',
'fex_ifil', 'ifil', 'fex_ied', 'ied', 'nl_imat', 'nl_ilyl', 'nl_icn',
'nl_ifis', 'nl_iqui', 'nl_ibio', 'nl_ies', 'nl_ihis', 'nl_ifil',
'nl_ied', 'ind_1', 'ind_2', 'ind_3', 'ind_4', 'ind_5', 'ind_6', 'ind_7',
'ind_8', 'ind_9', 'lc_1', 'lc_2', 'lc_3', 'lc_4', 'lc_5', 'lc_6',
'lc_7', 'lc_8', 'lc_9', 'lc_10', 'lc_11', 'lc_12', 'fex_rubrica',
'estado_rub', 'fex_lista_cotejo', 'estado_lc',
'fex_honestidad_academica'],
dtype='object')
# Seleccionamos
data2 = data[["ciclo","grado"]].copy()data2["grado"].unique()array([10, 4, 7, 3], dtype=int64)
data2[data2["grado"].isin([7,3])].head()| ciclo | grado | |
|---|---|---|
| 69 | 2023-2024 | 7 |
| 70 | 2023-2024 | 7 |
| 71 | 2023-2024 | 7 |
| 72 | 2023-2024 | 7 |
| 73 | 2023-2024 | 7 |
Requirement already satisfied: altair[all] in c:\users\meagu\anaconda3\lib\site-packages (5.0.1)
Requirement already satisfied: jinja2 in c:\users\meagu\anaconda3\lib\site-packages (from altair[all]) (3.1.4)
Requirement already satisfied: jsonschema>=3.0 in c:\users\meagu\anaconda3\lib\site-packages (from altair[all]) (4.23.0)
Requirement already satisfied: numpy in c:\users\meagu\anaconda3\lib\site-packages (from altair[all]) (1.26.4)
Requirement already satisfied: pandas>=0.18 in c:\users\meagu\anaconda3\lib\site-packages (from altair[all]) (2.2.3)
Requirement already satisfied: toolz in c:\users\meagu\anaconda3\lib\site-packages (from altair[all]) (0.12.0)
Requirement already satisfied: attrs>=22.2.0 in c:\users\meagu\anaconda3\lib\site-packages (from jsonschema>=3.0->altair[all]) (23.1.0)
Requirement already satisfied: jsonschema-specifications>=2023.03.6 in c:\users\meagu\anaconda3\lib\site-packages (from jsonschema>=3.0->altair[all]) (2023.7.1)
Requirement already satisfied: referencing>=0.28.4 in c:\users\meagu\anaconda3\lib\site-packages (from jsonschema>=3.0->altair[all]) (0.30.2)
Requirement already satisfied: rpds-py>=0.7.1 in c:\users\meagu\anaconda3\lib\site-packages (from jsonschema>=3.0->altair[all]) (0.10.6)
Requirement already satisfied: python-dateutil>=2.8.2 in c:\users\meagu\anaconda3\lib\site-packages (from pandas>=0.18->altair[all]) (2.9.0.post0)
Requirement already satisfied: pytz>=2020.1 in c:\users\meagu\anaconda3\lib\site-packages (from pandas>=0.18->altair[all]) (2024.1)
Requirement already satisfied: tzdata>=2022.7 in c:\users\meagu\anaconda3\lib\site-packages (from pandas>=0.18->altair[all]) (2023.3)
Requirement already satisfied: MarkupSafe>=2.0 in c:\users\meagu\anaconda3\lib\site-packages (from jinja2->altair[all]) (2.0.1)
Requirement already satisfied: six>=1.5 in c:\users\meagu\anaconda3\lib\site-packages (from python-dateutil>=2.8.2->pandas>=0.18->altair[all]) (1.16.0)
Note: you may need to restart the kernel to use updated packages.
WARNING: altair 5.0.1 does not provide the extra 'all'
También puedes seleccionar al mismo tiempo columnas y filas:
Ejercicio: - Del DataFrame de densidad poblacional, filtra las columnas de población y área, y las filas de Singapore, Bangladesh y Lebanon.
#7 Selección de datos por posición.
En la sección anterior, seleccionamos dado a etiquetas, esto es, con los nombres de las filas y las columnas. Podemos hacer lo mismo pero está vez con la posición. Para esto, en lugar de loc() y at(), usamos iloc() y iat().
# Seleccionamos las primeras 2 columnas.
df_columnas = df.iloc[:, 0:1]
# Seleccionamos las últimas 3 filas
df_filas = df.iloc[-3:, :]
# Elemento unico
dato = df.iat[0, 0]Retomamos el ejemplo .
Ejercicio: - Del DataFrame del data, filtra y quédate solo con columnas y filas pares.
# To Do