Prog - Orien - M - Datos Modulo 8
Prog - Orien - M - Datos Modulo 8
Estructuras Pandas
Series
DataFrames
Estructuras tabulares
Construcción
El acceso y la selección de datos en Pandas son procesos fundamentales para trabajar con DataFrames y Series,
( las estructuras de datos principales en análisis de datos ademas de las bases de datos)
Pandas ofrece diversas formas de acceder y seleccionar datos, lo que permite realizar tareas como filtrar filas
(registros), seleccionar columnas (campos) específicas y realizar operaciones de indexación avanzadas.
Un DataFrame tiene dos índices dobles, un par para las filas o registros (uno numérico y uno de etiquetas) y otro
para las columnas o campos (uno numérico y uno de etiquetas). Los índices alfanuméricos o etiquetas pueden o
no estar presentes, los numéricos siempre estan.
·
Crear un df de 4 filas y 10 columnas sin etiquetas
·Código Python
import pandas as pd
# creamos un DataFrame
lista_a = [ [10,9,8,7,6,5,4,3,2,1,0],
[100,109,118,207,96,350,240,3,200,250,300],
[210,211,212,213,214,215,216,217,218,219,220],
["Ariel","Betty","Caro","Dany","Ester","Fran","Gaby","Hector","Ines","Julia",
"Kary"] ]
df = pd.DataFrame(lista_a)
print (f"{df}")
·Salida esperada por consola
0 1 2 3 4 5 6 7 8 9 10 < -indice de
campo o columna
0 10 9 8 7 6 5 4 3 2 1 0
1 100 109 118 207 96 350 240 3 200 250 300
2 210 211 212 213 214 215 216 217 218 219 220
3 Ariel Betty Caro Dany Ester Fran Gaby Hector Ines Julia Kary
^
- indice de registro o fila
·
Acceder y seleccionar datos por posición mediante el indice numérico
Acceso directo
Código Python
# Seleccionar la columna index 1
columna = 1
print (f"df[columna]=\n{df[columna]}")
Salida esperada por consola
df[columna]=
0 9
1 109
2 211
3 Betty
^
- indice de registro o fila
Código Python
# Seleccionar las columnas index 1 y 3
print (f"df[[1:3]]=\n{df[[1,3]]}")
Salida esperada por consola
df[[1:3]]=
1 3< -indice de campo o columna
0 9 7
1 109 207
2 211 213
3 Betty Dany
^
- indice de registro o fila
Código Python
# Seleccionar las filas de la 1 a la 2 (excluyendo la 3)
print (f"df[1:3]=\n{df[1:3]}")
Salida esperada por consola
df[1:3]=
0 1 2 3 4 5 6 7 8 9 10< -indice de campo/columna
1 100 109 118 207 96 350 240 3 200 250 300
2 210 211 212 213 214 215 216 217 218 219 220
^
- indice de registro o fila
·
·
El acceso y la selección de datos en Pandas son una parte fundamental del análisis de datos.
Los métodos loc e iloc proporcionan una forma sencilla de acceder a los datos de un DataFrame por su índice o
posición.
·
.iloc
Acceder y seleccionar datos por posición mediante el indice numérico, utilizado el método iloc.
sintaxis .iloc[]
dataframe.iloc[filas, columnas],
Donde filas y columnas pueden ser indices individuales, listas de indices o slicing.
·
.iloc[ fila(s) , columnas(s) ]
Código Python
# Selección de una columna por posición
columna_0 = df.iloc[:, 0]
print (f"columna_0=\n{columna_0}")
·Salida esperada por consola
columna_0=
0 10
1 100
2 210
3 Ariel
Name: 0, dtype: object
Código Python
# Selección de una fila por posición
fila_3 = df.iloc[3, :]# fila_3 = df.iloc[3]
print (f"fila_3=\n{fila_3}")
·Salida esperada por consola
fila_1=
0 Ariel
1 Betty
2 Caro
3 Dany
4 Ester
5 Fran
6 Gaby
7 Hector
8 Ines
9 Julia
10 Kary
Name: 3, dtype: object
·
.iloc[ listas – slicing ]
Código Python
# Selección de una celda por posición
fila_3_columna_1 = df.iloc[3,1]
print (f"fila_3_columna_1 ={fila_3_columna_1}")
·Salida esperada por consola
columna_1_fila_3=Betty
Código Python
# Selección de una celda por posición lista
fila_1_3_columna_1_3_5_7 = df.iloc[[1,3],[1,3,5,7]]
print (f"fila_1_3_columna_1_3_5_7=\n{fila_1_3_columna_1_3_5_7}")
·Salida esperada por consola
fila_1_3_columna_1_3_5_7=
1 3 5 7
1 109 207 350 3
3 Betty Dany Fran Hector
Código Python
# Selección de una celda por posición slicing
fila_2a4_columna_1a8_x2 = df.iloc[2:4,1:8:2]
print (f"fila_2a4_columna_1a8_x2=\n{fila_2a4_columna_1a8_x2}")
·Salida esperada por consola
fila_2a4_columna_1a8_x2=
1 3 5 7
2 211 213 215 217
3 Betty Dany Fran Hector
·
·
Código Python
salida = df[df.columns[-2:]]# slicing anteultimo al final
print(f"salida=\n{salida}")
Opción Código Python
salida = df.iloc[ : ,[2,3]]
print(f"salida=\n{salida}")
Salida esperada por consola
salida= sueldo nombre
0 210 Ariel
1 211 Betty
2 212 Caro
3 213 Dany
4 214 Ester
5 215 Fran
6 216 Gaby
7 217 Hector
8 218 Ines
9 219 Julia
10 220 Kary
·
·
·
salida = df.iloc[1] # Todos los dato de la filas 1 y todas las columnas
salida = df.iloc[[0,1,2],:] # Todos los dato de todas las filas 0,1 y 2 / columnas 2 y 4
salida = df.iloc[:, [2, 4]] # Todos los dato de todas las filas / columnas 2 y 4
salida = df.iloc[[1,3], [2, 4]] #Todos los dato de las filas 1 al 3 / columnas 2 y 4
salida = df.iloc[0] # Todos los datos de la primera fila
salida = df.iloc[1] # Todos los datos de la segunda fila
salida = df.iloc[-1] # Todos los datos de la ultima fila
salida = df.iloc[:,0] # Todos los datos de la primera columna
salida = df.iloc[:,-1] # Todos los datos de la ultima columna
·
·
Acceso
Acceso directo
Código Python
print (f"df['B']=\n{df['B']}")
Salida esperada por consola
df['B']=
ingreso 9
locker 109
sueldo 211
nombre Betty
^
- etiqueta de registro o fila
Name: B, dtype: object
Código Python
print (f"df['locker':'sueldo']\n{df['locker':'sueldo']}")
Salida esperada por consola
df['locker':'sueldo']
A B C D E F G H I J K< - etiqueta de campo
o columna
locker 100 109 118 207 96 350 240 3 200 250 300
sueldo 210 211 212 213 214 215 216 217 218 219 220
^
- etiqueta de registro o fila
·
·
.loc
Acceder y seleccionar datos por posición mediante el etiqueta alfanumérica, utilizado el método loc.
sintaxis loc[]
dataframe.loc[etiqueta de filas, etiqueta de columnas]
dataframe.loc[ : , etiqueta de columnas]
dataframe.loc[ : , [col1,col2,col3,col4]]
Donde filas y columnas pueden ser etiquetas individuales, listas de etiquetas o slicing.
Es principalmente util para obtener informacion de arrays booleano donde nos devolverá solo aquellas
filas en las que el array tiene el valor True.
·
loc[ fila(s) , columnas(s) ]
Código Python
# Selección de una columna por etiqueta
columna_B = df.loc[:, 'B']
print (f"columna_B=\n{columna_B}")
·Salida esperada por consola
columna_B=
ingreso 9
locker 109
sueldo 211
nombre Betty
Name: B, dtype: object
Código Python
# Selección de una fila por etiqueta
fila_nombre = df.loc['nombre', :]# fila_nombre = df.loc['nombre']
print (f"fila_nombre=\n{fila_nombre}")
·Salida esperada por consola
fila_nombre=
A Ariel
B Betty
C Caro
D Dany
E Ester
F Fran
G Gaby
H Hector
I Ines
J Julia
K Kary
Name: nombre, dtype: object
·
loc[ listas – slicing ]
Código Python
# Selección de una celda por etiqueta
fila_nombre_columna_B = df.loc['nombre','B']
print (f"fila_nombre_columna_B={fila_nombre_columna_B}")
·Salida esperada por consola
fila_nombre_columna_B=Betty
Código Python
# Selección de una celda por etiqueta lista
fila_locker_nombre_columna_B_D_F_H = df.loc[['locker','nombre'],['B','D','F','H']]
print (f"fila_locker_nombre_columna_B_D_F_H=\n
{fila_locker_nombre_columna_B_D_F_H}")
·Salida esperada por consola
fila_locker_nombre_columna_B_D_F_H=
B D F H< -etiqueta de campo o columna
locker 109 207 350 3
nombre Betty Dany Fran Hector
^
- etiqueta de registro o fila
Código Python
# Selección de una celda por etiqueta slicing
fila_2a4_columna_1a8_x2 = df.loc[2:4,1:8:2]
print (f"fila_2a4_columna_1a8_x2=\n{fila_2a4_columna_1a8_x2}")
·Salida esperada por consola
fila_lockerAnombre_columna_BaH_x2=
B D F H< -etiqueta de campo o columna
locker 109 207 350 3
sueldo 211 213 215 217
nombre Betty Dany Fran Hector
^
- etiqueta de registro o fila
·
·
columnas
Código Python
# reformulamos el df
#
# df=df.T
#
datos = {
"ingreso":[10,9,8,7,6,5,4,3,2,1,0],
"locker" :[100,109,118,207,96,350,240,301,200,250,300],
"sueldo" :[210,211,212,213,214,215,216,217,218,219,220],
"nombre" :
["Ariel","Betty","Caro","Dany","Ester","Fran","Gaby","Hector","Ines","Julia", "Kary"]
}
df = pd.DataFrame(datos)
Salida esperada por consola
df= ingreso locker sueldo nombre
0 10 100 210 Ariel
1 9 109 211 Betty
2 8 118 212 Caro
3 7 207 213 Dany
4 6 96 214 Ester
5 5 350 215 Fran
6 4 240 216 Gaby
7 3 301 217 Hector
8 2 200 218 Ines
9 1 250 219 Julia
10 0 300 220 Kary
·
·
Código Python
salida = df.loc[ : ,['sueldo','nombre']]
print(f"salida=\n{salida}")
Código Python
salida =df[['sueldo','nombre']]
print(f"salida=\n{salida}")
Salida esperada por consola
salida= sueldo nombre
0 210 Ariel
1 211 Betty
2 212 Caro
3 213 Dany
4 214 Ester
5 215 Fran
6 216 Gaby
7 217 Hector
8 218 Ines
9 219 Julia
10 220 Kary
·
·
Malditos NA (NaN)
Para deshacerme de los NaN que no me permiten calcular tengo algunas opciones
Borra la fila
Rellenarla con un dato propio
Rellenarla con un dato del DataFrame
df_reparado =df_con_Nan.dropna() # borrolas filas que tienen algun NaN
df_reparado =df_con_Nan.fillna(o) # lleno los NaN con 0
df_reparado =df_con_Nan.fillna({“col1”=0,”col2”=”vacio”) # lleno los NaN de la col1 con 0 y los col2 con
“vacio”
Filtrado
Filtrado booleano
df.loc[df[columna]==valor]
df[df[columna]==valor]#omito loc porque es una sera booleana
df[df.columna==valor]#nombre python de columna
El filtrado booleano permita seleccionar y filtrar datos siendo ampliamente utilizada en análisis y manipulación de
datos
Filtrado de Filas:
Se utiliza para seleccionar filas que cumplan una condición específica.
# Filtrado de filas donde 'A' es mayor que 1
filas_filtradas = df[df['A'] > 1]
·
Selección de Columnas:
Se utiliza para seleccionar columnas específicas por nombre.
# Selección de columnas 'A' y 'B'
columnas_seleccionadas = df[['A', 'B']]
·
inplace:
Booleano que indica si deseas realizar la eliminación en el lugar (modificar el DataFrame original) o si
deseas devolver un nuevo DataFrame con las filas o columnas eliminadas. Por defecto, es False.
·
Métodos DatoFames
de Filtrado y df[bool_expression] Permite seleccionar elementos basados en una expresión booleana.
Selección de df.between(start, end) Devuelve los elementos que están dentro del rango especificado.
Datos df.nlargest(n) Devuelve los n elementos más grandes.
df.nsmallest(n) Devuelve los n elementos más pequeños.
df.loc [ df[nombre_1_col] > Filtra filas basadas en una condición.\n
valor]
·
Código Python
import pandas as pd
dict_ = {
'uno' : [1,2,3,4,1,2,3,4],
'dos' : [4,3,2,1,0,9,8,7],
'tres': [5,6,7,8,9,10,11,12]
}
df = pd.DataFrame(data=dict_, index=['a', 'b', 'c' , 'd' , 'e' , 'f' , 'g' , 'h'])
print("\nindice dict_ indice alfa:\n",df)
Salida esperada por consola
·
·
Código Python
salida = df.loc[df['locker'] %2 ==0, ['locker', 'sueldo']]
print(f"salida=\n{salida}")
Salida esperada por consola
salida= locker sueldo
0 100 210
2 118 212
4 96 214
5 350 215
6 240 216
8 200 218
9 250 219
10 300 220
·
·
filtrado por una columna e inverso
serie_serie_filtro_bool = df['columna'] condición ejemplo 'nombre'== 'Pepe' 'sueldo'=> 1000
salida = df.loc[serie_filtro_bool ]
·
Código Python
datos = {
"ingreso":[10,9,8,7,6,5,4,3,2,1,0],
"locker" :[100,109,118,207,96,350,240,301,200,250,300],
"sueldo" :[210,211,212,213,214,215,216,217,218,219,220],
"nombre" :
["Ariel","Betty","Caro","Dany","Ester","Fran","Gaby","Hector","Ines","Julia", "Kary"]
}
df = pd.DataFrame(datos)
Código Python
""" filtrado por una columna e inverso"""
########################################################################
print ("*"*50)
print(f"df=\n{df}")
print ("*"*50)
########################################################################
""" nombre"""
serie_serie_filtro_bool = df['nombre'] == 'Ariel'
print(f"serie_filtro_bool =\n{serie_filtro_bool }")
print ("*"*50)
########################################################################
salida = df.loc[serie_filtro_bool ]
print(f"salida=\n{salida}")
print ("*"*50)
Código Python
""" en una sola linea"""
salida = df.loc[df['nombre'] == 'Ariel' ]
print(f"salida=\n{salida}")
print ("*"*50)
Salida esperada por consola
df.loc[df['nombre'] == 'Ariel'] Salida=
df= ingreso locker sueldo nombre serie_filtro_bool = ingreso locker sueldo nombre
0 10 100 210 Ariel 0 True---> 0 10 100 210 Ariel
1 9 109 211 Betty 1 False--//--
2 8 118 212 Caro 2 False--//--
3 7 207 213 Dany 3 False--//--
4 6 96 214 Ester 4 False--//--
5 5 350 215 Fran 5 False--//--
6 4 240 216 Gaby 6 False--//--
7 3 301 217 Hector 7 False--//--
8 2 200 218 Ines 8 False--//--
9 1 250 219 Julia 9 False--//--
10 0 300 220 Kary 10 False--//--
Name: nombre, dtype:
bool
·
·
print("DataFrame Maximo:--------------------------------->:",df_titanic.max(numeric_only=True))
Código Python
""" filtrado por una columna e inverso"""
########################################################################
print ("*"*50)
print(f"df=\n{df}")
print ("*"*50)
########################################################################
""" sueldo"""
serie_serie_filtro_bool = df['sueldo'] >= 215
print(f"serie_filtro_bool =\n{serie_filtro_bool }")
print ("*"*50)
########################################################################
salida = df.loc[serie_filtro_bool ]
print(f"salida=\n{salida}")
print ("*"*50)
Código Python
""" en una sola linea"""
salida = df.loc[df['sueldo'] >= 215 ]
print(f"salida=\n{salida}")
print ("*"*50)
Salida esperada por consola
df.loc[df['sueldo'] >= 215] Salida=
df= ingreso locker sueldo nombre serie_filtro_bool = ingreso locker sueldo nombre
0 10 100 210 Ariel 0 False--//--
1 9 109 211 Betty 1 False--//--
2 8 118 212 Caro 2 False--//--
3 7 207 213 Dany 3 False--//--
4 6 96 214 Ester 4 False--//--
5 5 350 215 Fran 5 True---> 5 5 350 215 Fran
6 4 240 216 Gaby 6 True---> 6 4 240 216 Gaby
7 3 301 217 Hector 7 True---> 7 3 301 217 Hector
8 2 200 218 Ines 8 True---> 8 2 200 218 Ines
9 1 250 219 Julia 9 True---> 9 1 250 219 Julia
10 0 300 220 Kary 10 True---> 10 0 300 220 Kary
Name: sueldo, dtype:
bool
·
·
Código Python
""" inversa"""
salida_inversa = df.loc[df['sueldo'] < 215] # inversa 1
print(f"salida_inversa=\n{salida_inversa}")
·
serie_serie_filtro_bool = df['sueldo'] >= 215 # reuso el filtro anterior
salida_inversa = df.loc[~(serie_filtro_bool )] # inversa 2 niego el filtro
print(f"salida_inversa=\n{salida_inversa}")
·
salida_inversa = df.loc[~(df['sueldo'] >= 215)] # inversa 3 genero un filtro y lo niego
print(f"salida_inversa=\n{salida_inversa}")
·
Salida esperada por consolade los 3 códigos
df.loc[df['sueldo'] < 215]
df.loc[~(df['sueldo'] >= 215)]
df.loc[~(serie_filtro_bool )] Salida=
df= ingreso locker sueldo nombre serie_filtro_bool = ingreso locker sueldo nombre
0 10 100 210 Ariel 0 False-//-True-> 0 10 100 210 Ariel
1 9 109 211 Betty 1 False-//-True-> 1 9 109 211 Betty
2 8 118 212 Caro 2 False-//-True-> 2 8 118 212 Caro
3 7 207 213 Dany 3 False-//-True-> 3 7 207 213 Dany
4 6 96 214 Ester 4 False-//-True-> 4 6 96 214 Ester
5 5 350 215 Fran 5 True->False-//-
6 4 240 216 Gaby 6 True->False-//-
7 3 301 217 Hector 7 True->False-//-
8 2 200 218 Ines 8 True->False-//-
9 1 250 219 Julia 9 True->False-//-
10 0 300 220 Kary 10True->False-//-
Name: sueldo, dtype:
bool
·
·
Operadores lógicos & (and / y) , | (or / o) , ~ (not / no)
Se pueden utilizar operadores lógicos para combinar condiciones en la selección de datos.
# Filtrado de filas donde 'A' es mayor que 1 y 'B' es menor que 6
filas_filtradas = df[(df['A'] > 1) & (df['B'] < 6)]
Se permite combinar múltiples condiciones booleanas utilizando operadores lógicos como & (and) y | (or) para
realizar filtrados más complejos y selectivos.
filtrado por varias columnas e inversos
and - y
serie_serie_filtro_bool = ( df['columna'] condición ) & ( df['columna'] condición 2 )
salida = df.loc[serie_filtro_bool ]
or - o
serie_serie_filtro_bool = ( df['columna'] condición ) | ( df['columna'] condición 2 )
salida = df.loc[serie_filtro_bool ]
not - no
df.loc[ ~ (serie_filtro_bool ) ]
·
Código Python
datos = {
"ingreso":[10,9,8,7,6,5,4,3,2,1,0],
"locker" :[100,109,118,207,96,350,240,301,200,250,300],
"sueldo" :[210,211,212,213,214,215,216,217,218,219,220],
"nombre" :
["Ariel","Betty","Caro","Dany","Ester","Fran","Gaby","Hector","Ines","Julia", "Kary"]
}
df = pd.DataFrame(datos)
Código Python
serie_serie_filtro_bool = (df['sueldo'] >= 215) | (df['ingreso'] % 2 == 0)
# ^____or
print(f"serie_filtro_bool =\n{serie_filtro_bool }")
print ("*"*50)
salida = df.loc[serie_filtro_bool ]
print(f"salida=\n{salida}")
·
salida_inversa = df.loc[(df['sueldo'] >= 215) | (df['ingreso'] % 2 == 0)]
print(f"salida_inversa=\n{salida_inversa}")
·
Salida esperada por consolade los 3 códigos
df.loc[(df['sueldo'] >= 215) |
(df['ingreso'] % 2 == 0)]
df= ingreso locker sueldo nombre serie_filtro_bool = Salida=
0 10 100 210 Ariel 0 True---> ingreso locker sueldo nombre
1 9 109 211 Betty 1 False--//-- 0 10 100 210 Ariel
2 8 118 212 Caro 2 True--->
3 7 207 213 Dany 3 False--//-- 2 8 118 212 Caro
4 6 96 214 Ester 4 True--->
5 5 350 215 Fran 5 True---> 4 6 96 214 Ester
6 4 240 216 Gaby 6 True---> 5 5 350 215 Fran
7 3 301 217 Hector 7 True---> 6 4 240 216 Gaby
8 2 200 218 Ines 8 True---> 7 3 301 217 Hector
9 1 250 219 Julia 9 True---> 8 2 200 218 Ines
10 0 300 220 Kary 10 True---> 9 1 250 219 Julia
Name: sueldo, dtype: 10 0 300 220 Kary
bool
·
·
Código Python
serie_serie_filtro_bool = (df['sueldo'] >= 215) & (df['locker'] % 2 == 0)
# ^____and
print(f"serie_filtro_bool =\n{serie_filtro_bool }")
########################################################################
print ("*"*50)
salida = df.loc[serie_filtro_bool ]
print(f"salida=\n{salida}")
Salida esperada por consolade los 3 códigos
df.loc[(df['sueldo'] >= 215) &
(df['locker'] % 2 == 0)] Salida=
df= ingreso locker sueldo nombre serie_filtro_bool = ingreso locker sueldo nombre
0 10 100 210 Ariel 0 False--//--
1 9 109 211 Betty 1 False--//--
2 8 118 212 Caro 2 False--//--
3 7 207 213 Dany 3 False--//--
4 6 96 214 Ester 4 False--//--
5 5 350 215 Fran 5 True---> 5 5 350 215 Fran
6 4 240 216 Gaby 6 True---> 6 4 240 216 Gaby
7 3 301 217 Hector 7 False--//--
8 2 200 218 Ines 8 True---> 8 2 200 218 Ines
9 1 250 219 Julia 9 True---> 9 1 250 219 Julia
10 0 300 220 Kary 10 True---> 10 0 300 220 Kary
Name: sueldo, dtype:
bool
·
·
Opción para la selección de columna de un DataFrame
df[nombre_columna]
Si el nombre de la columna ‘nombre_columna‘ es un nombre de objeto Python válido (para un identificador de
Python) y además no coincide con el nombre de las palabras reservadas index, major_axis, minor_axis, items y
tampoco coincide con el nombre de un método de la clase DataFrame, se puede acceder a dicha columna de la
siguiente manera: df.nombre_columna.
·
Axis
Puedes especificar la dirección en la que deseas aplicar un método o función, ya sea a lo largo de las filas
(axis=0) o a lo largo de las columnas (axis=1).
filter
Utilizar el método isin() para seleccionar datos que se encuentran en una lista.
·
filter
Código Python
datos = {
"ingreso":[10,9,8,7,6,5,4,3,2,1,0],
"locker" :[100,109,118,207,96,350,240,301,200,250,300],
"sueldo" :[210,211,212,213,214,215,216,217,218,219,220],
"nombre" :
["Ariel","Betty","Caro","Dany","Ester","Fran","Gaby","Hector","Ines","Julia", "Kary"]
}
df = pd.DataFrame(datos,index=['a1', 'b2', 'c3' , 'd1' , 'e2' , '3f' , 'g1' , 'h2', 'i3' , 'j1' , 'k3'])
Código Python
salida = df.filter(items=['sueldo', 'locker'])
Salida esperada por consolade los 3 códigos
df= ingreso locker sueldo nombre salida=
a1 10 100 210 Ariel sueldo locker
b2 9 109 211 Betty a1 210 100
c3 8 118 212 Caro b2 211 109
d1 7 207 213 Dany c3 212 118
e2 6 96 214 Ester d1 213 207
f3 5 350 215 Fran e2 214 96
g1 4 240 216 Gaby f3 215 350
h2 3 301 217 Hector g1 216 240
i3 2 200 218 Ines h2 217 301
h1 1 250 219 Julia i3 218 200
k2 0 300 220 Kary j1 219 250
k2 220 300
·
·
like
filter permite el uso de like similar a SQL
df.filter(like='cambio') # los nombres de las columnas deben tener la cadena específica ‘cambio’
(‘tipo de cambio’-’moneda de cambio’-’cambio de habitos’)
·
Dado un df con
columns: 2021,2022….enero_2023,febrero_2023,marzo_2023,abril_2023,…..diciembre_2023,,2024
y filas : compras_2021, ventas_2021 …... compras_2023, ventas_2023, compras_2024, ventas_2024
puedo elegir df.filter(like='2023' axis=0)
puedo elegir df.filter(like='2023' axis=1)
·
Filter like
Código Python
print ("*"*50)
salida = df.filter(like='n', axis=1) # Filtramos filas que contengan el string 'n'
Código Python
print ("*"*50)
salida = df.filter(like='2', axis=0) # Filtramos filas que contengan el string '2'
Salida esperada por consolade los 3 códigos
salida= Salida=
df= ingreso locker sueldo nombre ingreso nombre ingreso locker sueldo nombre
a1 10 100 210 Ariel a1 10 Ariel
b2 9 109 211 Betty b2 9 Betty b2 9 109 211 Betty
c3 8 118 212 Caro c3 8 Caro
d1 7 207 213 Dany d1 7 Dany
e2 6 96 214 Ester e2 6 Ester e2 6 96 214 Ester
f3 5 350 215 Fran f3 5 Fran
g1 4 240 216 Gaby g1 4 Gaby
h2 3 301 217 Hector h2 3 Hector h2 3 301 217 Hector
i3 2 200 218 Ines i3 2 Ines
h1 1 250 219 Julia j1 1 Julia
k2 0 300 220 Kary k2 0 Kary k2 0 300 220 Kary
·
·
Isin
Utilizar el método isin() para seleccionar datos que se encuentran en una lista.
·
isin
Código Python
serie_serie_filtro_bool = df['sueldo'].isin((212, 218))
print(f"serie_filtro_bool =\n{serie_filtro_bool }")
########################################################################
print ("*"*50)
salida = df.loc[serie_filtro_bool ]
print(f"salida=\n{salida}")
Salida esperada por consolade los 3 códigos
df.loc[(df['sueldo'].isin((212, 218)))] Salida=
df= ingreso locker sueldo nombre serie_filtro_bool = ingreso locker sueldo nombre
0 10 100 210 Ariel 0 False--//--
1 9 109 211 Betty 1 False--//--
2 8 118 212 Caro 2 True---> 2 8 118 212 Caro
3 7 207 213 Dany 3 False--//--
4 6 96 214 Ester 4 False--//--
5 5 350 215 Fran 5 False--//--
6 4 240 216 Gaby 6 False--//--
7 3 301 217 Hector 7 False--//--
8 2 200 218 Ines 8 True---> 8 2 200 218 Ines
9 1 250 219 Julia 9 False--//--
10 0 300 220 Kary 10 False--//--
Name: sueldo, dtype:
bool
·
·
Código Python
serie_serie_filtro_bool = df.columns.isin(['locker', 'nombre'])
print(f"serie_filtro_bool =\n{serie_filtro_bool }")
########################################################################
print ("*"*50)
selec_cols = df.columns[serie_filtro_bool ]
print(f"selec_cols=\n{selec_cols}")
########################################################################
print ("*"*50)
salida=df[selec_cols]
print(f"salida=\n{salida}")
Salida esperada por consolade los 3 códigos
df.columns.isin(['locker', 'nombre']) serie_filtro_bool = Salida=
df= ingreso locker sueldo nombre [False True False True] locker nombre
0 10 100 210 Ariel ^ ^--> 0 100 Ariel
1 9 109 211 Betty |_____________> 1 109 Betty
2 8 118 212 Caro 2 118 Caro
3 7 207 213 Dany 3 207 Dany
4 6 96 214 Ester Index(['locker', 'nombre'], 4 96 Ester
5 5 350 215 Fran dtype='object') 5 350 Fran
6 4 240 216 Gaby 6 240 Gaby
7 3 301 217 Hector 7 301 Hector
8 2 200 218 Ines 8 200 Ines
9 1 250 219 Julia 9 250 Julia
10 0 300 220 Kary 10 300 Kary
·
·
Query
Utilizar el método query() para seleccionar datos utilizando una expresión booleana.
El método query es otro metodo de DataFrame para seleccionar filas basada en los valores de las columnas.
Aqui los que ya han estudiado bases de datos SQL (Structured Query Language) y recuerdan la cláusula
WHERE corren con ventajas.
A query le proporcionaremos como parámetro un string con las condiciones y operadores.
·
Query
Código Python
salida = df.query('nombre == "Ariel"')
# ^ ^-----^^
# |_________________|string como condición
print(f"salida=\n{salida}")
Salida esperada por consola
salida=
ingreso locker sueldo nombre
0 10 100 210 Ariel
·Código Python
salida = df.query('sueldo >= 215 & ingreso % 2 == 0' )
print(f"salida=\n{salida}")
Salida esperada por consola
salida=
ingreso locker sueldo nombre
6 4 240 216 Gaby
8 2 200 218 Ines
10 0 300 220 Kary
·
·
Código Python
valor_sueldo = 215
valor_ingreso = 0
salida = df.query('sueldo >= @valor_sueldo & ingreso % 2 == @valor_ingreso' )
print(f"salida=\n{salida}")
Salida esperada por consola
salida=
ingreso locker sueldo nombre
6 4 240 216 Gaby
8 2 200 218 Ines
10 0 300 220 Kary
·
·
select_dtypes
Permite especificar el tipo de datos de las columnas que desea seleccionar.
exclude e include
Numéricos:
'int64': Enteros de 64 bits.
'float64': Números de coma flotante de 64 bits.
'complex64': Números complejos de 64 bits.
df.select_dtypes(include=['int64', 'float64'])
Texto y Cadenas de Caracteres:
'object': Cadenas de caracteres y otros tipos de objetos de Python.
'string': Cadenas de caracteres (a partir de Pandas 1.0.0).
df.select_dtypes(include=['object'])
Booleanos:
'bool': Valores booleanos (True o False).
df.select_dtypes(include=['bool'])
Fecha y Hora:
'datetime64': Fechas y horas.
df.select_dtypes(include=['datetime64'])
Categóricos:
'category': Datos categóricos.
df.select_dtypes(include=['category'])
Tipos de Datos Específicos (Ejemplos Adicionales):
'timedelta64': Diferencia entre fechas y horas.
'complex128': Números complejos de 128 bits.
'uint16': Enteros sin signo de 16 bits.
'float32': Números de coma flotante de 32 bits.
df.select_dtypes(exclude=['object', 'bool'])
·····································································································
Métodos DatoFames
de estadísticas df.min() Permite obtener el elemento mas pequeño del df
y Resumen df.max() Permite obtener el elemento mas grande del df
df.mean() Permite obtener la media de los elemento del df
df.idxmin() Permite ubicar el índice del valor mínimo.
df.idxmax() Permite ubicar el índice del valor máximo.
df.median() Permite calcular la mediFran de los valores.
df.std() Permite obtener la desviación estándar de los elemento del df
df.count() Permite obtener la cantidad de elemento del df
df.reindex Permite cambiar el orden de las filas de forma manual
df.describe() Permite calcular estadísticas descriptivas sobre la DataFrame.
df.sum() Permite calcular la suma de los valores del df.
df.corr(other) DataFrame.corr(other): Calcula la correlación con otra DataFrame.
·····································································································
Métodos DatoFames
de (obviamente el DataFrame debe contener fechas o tiempos)
Manipulación df.dt.year df.dt.month Devuelve el año de la fecha.
de Fechas y df.dt.day Devuelve el mes de la fecha.
Tiempos df.dt.strftime(format) Devuelve el día de la fecha.
pd.to_datetime(df) Convierte fechas en cadenas de texto con formato.
Convierte una DataFrame en un objeto DateTime.
·····································································································
Métodos DatoFames
de df.apply(func) Aplica una función a cada elemento del df.
Manipulación df.map(dict_or_func) Mapea valores a nuevos valores según un diccionario o función.
de Datos df.fillna(value) Rellena los valores nulos con el valor especificado.
df.dropna() Permite eliminar filas con valores nulos.
df.drop(index) Elimina un elemento por índice o etiqueta.
df.T Crea la transposición del df
·
Apply
El método df.apply(func) permite aplicar una función personalizada (func) a lo largo de las filas o columnas de
un DataFrame (df).
La dirección en la que deseas aplicar el método o El método, ya sea a lo largo de las filas (axis=0) o a lo largo de
las columnas (axis=1).
·
Apply
Código Python
datos = {
"ingreso":[10,9,8,7,6,5,4,3,2,1,0],
"locker" :[100,109,118,207,96,350,240,301,200,250,300],
"sueldo" :[210,211,212,213,214,215,216,217,218,219,220],
"nombre" :
["Ariel","Betty","Caro","Dany","Ester","Fran","Gaby","Hector","Ines","Julia", "Kary"]
}
df = pd.DataFrame(datos)
·Código Python
def suma_serie(serie):
return serie.sum()
#---------------------------------------------------------------------------------------
suma_por_fila = df.apply(suma_serie)
print(f"suma_por_fila=\n{suma_por_fila}")
Salida esperada por consola
suma_por_fila=
ingreso 55
locker 2271
sueldo 2365
nombre ArielBettyCaroDanyEsterFranGabyHectorInesJulia…< - - - - - -No tiene
sentido
dtype: object
Código Python
def suma_serie(serie):
return serie.sum()
#---------------------------------------------------------------------------------------
diferencia_max_min_por_columna = df.select_dtypes(exclude=['object'])
.apply(diferencia_max_min, axis=0)
print(f"suma_por_fila=\n{suma_por_fila}")
Salida esperada por consola
suma_por_fila=
ingreso 55
locker 2271
sueldo 2365
dtype: int64
·
·
Código Python
datos = {
"ingreso":[10,9,8,7,6,5,4,3,2,1,0],
"locker" :[100,109,118,207,96,350,240,301,200,250,300],
"sueldo" :[210,211,212,213,214,215,216,217,218,219,220],
"nombre" :
["Ariel","Betty","Caro","Dany","Ester","Fran","Gaby","Hector","Ines","Julia", "Kary"]
}
df = pd.DataFrame(datos)
Código Python
def diferencia_max_min(columna):
return columna.max() - columna.min()
#---------------------------------------------------------------------------------------
diferencia_max_min_por_columna =
df.select_dtypes(exclude=['object']) .apply(diferencia_max_min, axis=0)
print(f"diferencia_max_min_por_columna=\n{diferencia_max_min_por_columna}")
Salida esperada por consola
diferencia_max_min_por_columna=
ingreso 10
locker 254
sueldo 10
dtype: int64
dtype: object
Código Python
def suma_serie(serie):
return serie.sum()
#---------------------------------------------------------------------------------------
diferencia_max_min_por_fila =
df.select_dtypes(exclude=['object']).apply(diferencia_max_min, axis=1)
print(f"diferencia_max_min_por_fila=\n{diferencia_max_min_por_fila}")
Salida esperada por consola
diferencia_max_min_por_fila=
0 200
1 202
2 204
3 206
4 208
5 345
6 236
7 298
8 216
9 249
10 300
dtype: int64
·
·
Map
El método df.map(func) permite aplicar una función personalizada (func) o mapeo a una Serie de un DataFrame
(df).
Esta función toma como argumento una función, un diccionario u otra Serie que se utilizará para realizar la
transformación.
·
Map
Código Python
datos = {
"ingreso":[10,9,8,7,6,5,4,3,2,1,0],
"locker" :[100,109,118,207,96,350,240,301,200,250,300],
"sueldo" :[210,211,212,213,214,215,216,217,218,219,220],
"nombre" :
["Ariel","Betty","Caro","Dany","Ester","Fran","Gaby","Hector","Ines","Julia", "Kary"]
}
df = pd.DataFrame(datos)
·Código Python
def es_par(dato):
return dato%2==0
#---------------------------------------------------------------------------------------
salida = df["ingreso"].map(es_par)# < - - - - - - - - - - map(función)
print(f"salida es_par=\n{salida}")
Salida esperada por consola
salida es_par=
0 True
1 False
2 True
3 False
4 True
5 False
6 True
7 False
8 True
9 False
10 True
Name: ingreso, dtype: bool
Código Python
salida = df.locker.map(es_par)# < - - - - - - - - - - map(función)
print(f"salida es_par=\n{salida}")
Salida esperada por consola
salida es_par=
0 True
1 False
2 True
3 False
4 True
5 True
6 True
7 False
8 True
9 True
10 True
Name: locker, dtype: bool
·
·
Código Python
datos = {
"ingreso":[10,9,8,7,6,5,4,3,2,1,0],
"locker" :[100,109,118,207,96,350,240,301,200,250,300],
"sueldo" :[210,211,212,213,214,215,216,217,218,219,220],
"nombre" :
["Ariel","Betty","Caro","Dany","Ester","Fran","Gaby","Hector","Ines","Julia", "Kary"]
}
df = pd.DataFrame(datos)
·Código Python
locker_dic ={ 100:"piso 1 izq",
109:"piso 1 izq",
118:"piso 1 der",
207:"piso 2 izq",
96: "piso PB der",
350:"piso 3 der",
240:"piso 2 der",
301:"piso 3 izq",
200:"piso 2 der",
250:"piso 2 der",
300:"piso 3 der"}
salida = df.locker.map(locker_dic)# < - - - - - - - - - - map(diccionario)
print(f"salida locker_dic=\n{salida}")
Salida esperada por consola
salida locker_dic=
0 piso 1 izq
1 piso 1 izq
2 piso 1 der
3 piso 2 izq
4 piso PB der
5 piso 3 der
6 piso 2 der
7 piso 3 izq
8 piso 2 der
9 piso 2 der
10 piso 3 der
Name: locker, dtype: object
·
·
Fillna
El método df.fillna() busca los valores NaN y los reemplazan por valores pre-establecidos.
value: El valor que se utilizará para reemplazar los valores faltantes (NaN).
inplace: booleana que indica si se debe realizar la modificación en el lugar o si se debe devolver un nuevo
DataFrame con los valores llenados.
·
Fillna()
Código Python
datos = {
"ingreso":[10,9,8,7,6,5,None,3,2,1,0],
"locker" :[100,None,118,207,96,350,240,301,200,250,300],
"sueldo" :[210,211,212,213,214,None,216,217,218,219,220],
"nombre" :
["Ariel","Betty","Caro","Dany","Ester",None,"Gaby","Hector","Ines","Julia", "Kary"]
}
import numpy as np
datos = {
"ingreso":[10,9,8,7,6,5,np.nan,3,2,1,0],
"locker" :[100,np.nan,118,207,96,350,240,301,200,250,300],
"sueldo" :[210,211,212,213,214,np.nan,216,217,218,219,220],
"nombre" :
["Ariel","Betty","Caro","Dany","Ester",np.nan,"Gaby","Hector","Ines","Julia", "Kary"]
}
df = pd.DataFrame(datos)
·Código Python
salida = df.fillna(0) # < - - - - - - - - se reemplaza por cero (0)
print(f"salida sin NaN=\n{salida}")
print ("*"*50)
alida esperada por consola
original con NaN= salida sin NaN=
ingreso locker sueldo nombre ingreso locker sueldo nombre
0 10.0 100.0 210.0 Ariel 0 10.0 100.0 210.0 Ariel
1 9.0 NaN 211.0 Betty 1 9.0 0.0 211.0 Betty
2 8.0 118.0 212.0 Caro 2 8.0 118.0 212.0 Caro
3 7.0 207.0 213.0 Dany 3 7.0 207.0 213.0 Dany
4 6.0 96.0 214.0 Ester 4 6.0 96.0 214.0 Ester
5 5.0 350.0 NaN None 5 5.0 350.0 0.0 0
6 NaN 240.0 216.0 Gaby 6 0.0 240.0 216.0 Gaby
7 3.0 301.0 217.0 Hector 7 3.0 301.0 217.0 Hector
8 2.0 200.0 218.0 Ines 8 2.0 200.0 218.0 Ines
9 1.0 250.0 219.0 Julia 9 1.0 250.0 219.0 Julia
10 0.0 300.0 220.0 Kary 10 0.0 300.0 220.0 Kary
·
·
Dropna
El método df.fillna() busca los valores NaN y eliminar filas o columnas los contienen. de un DataFrame. Este
método es útil cuando deseas eliminar datos faltantes antes de realizar análisis o procesamiento posterior.
Sintaxis:
df.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
axis: Indica si deseas eliminar filas (axis=0, por defecto) o columnas (axis=1) que contienen valores faltantes.
how: Controla cuándo se eliminará una fila o columna.
'any': (default) Eliminará una fila o columna si contiene al menos un valor faltante.
'all': Solo eliminará una fila o columna si todos sus valores son faltantes.
thresh: Establece un limite o umbral con un número entero que especifica la cantidad mínimo de valores no
faltantes requeridos en una fila o columna antes de que no se elimine.
subset: Una lista de etiquetas de columnas que se utilizarán para buscar valores faltantes. Si se proporciona, solo
se eliminarán filas o columnas que tengan valores faltantes en las columnas especificadas.
inplace: Booleano que indica si deseas realizar la eliminación en el lugar (modificar el DataFrame original) o si
deseas devolver un nuevo DataFrame con las filas o columnas eliminadas. Por defecto, es False.
·
dropna()
Código Python
import numpy as np
datos = {
"ingreso":[10,9,8,7,6,5,np.nan,3,2,1,np.nan],
"locker" :[100,109,118,207,96,350,240,301,200,250,300],
"sueldo" :[210,np.nan,212,213,214,np.nan,216,217,np.nan,219,220],
"nombre" :
["Ariel","Betty","Caro","Dany","Ester","Fran","Gaby","Hector","Ines","Julia", "Kary"]
}
df = pd.DataFrame(datos)
print(f"original con NaN=\n{df}")
Código Python
salida = df.dropna(axis=0)< - - - - - - - - elimina por filas (axis=0)
print(f"salida sin NaN borrado por fila=\n{salida}")
Código Python
salida = df.dropna(axis=1)< - - - - - - - - elimina por columnas (axis=1)
print(f"salida sin NaN borrado por columna=\n{salida}")
Salida esperada por consola
original con NaN= salida sin NaN borrado por fila= salida sin NaN borrado por
ingreso locker sueldo nombre ingreso locker sueldo nombre columna=
0 10.0 100 210.0 Ariel 0 10.0 100 210.0 Ariel locker nombre
1 9.0 109 NaN Betty 0 100 Ariel
2 8.0 118 212.0 Caro 2 8.0 118 212.0 Caro 1 109 Betty
3 7.0 207 213.0 Dany 3 7.0 207 213.0 Dany 2 118 Caro
4 6.0 96 214.0 Ester 4 6.0 96 214.0 Ester 3 207 Dany
5 5.0 350 NaN Fran 4 96 Ester
6 NaN 240 216.0 Gaby 5 350 Fran
7 3.0 301 217.0 Hector 7 3.0 301 217.0 Hector 6 240 Gaby
8 2.0 200 NaN Ines 7 301 Hector
9 1.0 250 219.0 Julia 9 1.0 250 219.0 Julia 8 200 Ines
10 NaN 300 220.0 Kary 9 250 Julia
10 300 Kary
·
·
Drop()
El método df.drop(index) permite eliminar una o varias filas o columnas de un DataFrame según su indice.
Este método es útil cuando deseas eliminar datos y achicar el tamaño del df.
Sintaxis:
df.drop(index, axis=0, inplace=False)
index: La etiqueta o lista de etiquetas de las filas que deseas eliminar.
axis: Indica si deseas eliminar filas (axis=0, por defecto) o columnas (axis=1).
inplace: Un valor booleano que indica si deseas realizar la eliminación en el lugar (modificar el DataFrame
original) o si deseas devolver un nuevo DataFrame sin las filas especificadas. Por defecto, es False.
·
drop()
Código Python
datos = {
"ingreso":[10,9,8,7,6,5,4,3,2,1,0],
"locker" :[100,109,118,207,96,350,240,301,200,250,300],
"sueldo" :[210,211,212,213,214,215,216,217,218,219,220],
"nombre" :
["Ariel","Betty","Caro","Dany","Ester","Fran","Gaby","Hector","Ines","Julia", "Kary"]
}
df = pd.DataFrame(datos)
print(f"original=\n{df}")
Código Python
df_sin_filas = df.drop(["A","E","J"], axis=0)< - - - - - - - - elimina por filas (axis=0)
print(f"df_sin_filas=\n{df_sin_filas}")
Código Python
df_sin_columna = df.drop(["locker"], axis=1)< - - - - - - - - elimina por columnas (axis=1)
print(f"df_sin_columna=\n{df_sin_columna}")
Salida esperada por consola
original= df_sin_filas= df_sin_columna=
ingreso locker sueldo nombre ingreso locker sueldo nombre ingreso sueldo nombre
A 10 100 210 Ariel A 10 210 Ariel
B 9 109 211 Betty B 9 109 211 Betty B 9 211 Betty
C 8 118 212 Caro C 8 118 212 Caro C 8 212 Caro
D 7 207 213 Dany D 7 207 213 Dany D 7 213 Dany
E 6 96 214 Ester E 6 214 Ester
F 5 350 215 Fran F 5 350 215 Fran F 5 215 Fran
G 4 240 216 Gaby G 4 240 216 Gaby G 4 216 Gaby
H 3 301 217 Hector H 3 301 217 Hector H 3 217 Hector
I 2 200 218 Ines I 2 200 218 Ines I 2 218 Ines
J 1 250 219 Julia J 1 219 Julia
K 0 300 220 Kary K 0 300 220 Kary K 0 220 Kary
·
·
dt.t o dt.transpose()
La transposición, representada por dt.t o dt.transpose(), es una operación que se utiliza para cambiar las filas de
una matriz o un DataFrame a columnas y viceversa.
Cambio de Orientación de Datos:
La transposición es útil cuando deseas cambiar la orientación de tus datos. Por ejemplo, si tienes un
DataFrame donde las filas representan variables y las columnas representan observaciones, la
transposición te permitirá cambiarlo para que las filas sean observaciones y las columnas sean variables,
o viceversa. Esto puede ser útil en casos en los que prefieras trabajar con los datos de una manera u otra.
Cálculos y Operaciones:
En algunos casos, la transposición es necesaria para realizar ciertos cálculos o aplicar operaciones.
Algunos algoritmos o funciones pueden requerir que los datos estén en un formato específico, y la
transposición puede ser parte del proceso de preparación de datos.
Visualización de Datos:
En la visualización de datos, a veces es más efectivo representar los datos en una orientación diferente
para crear gráficos más claros y legibles. La transposición puede ayudar a lograr este objetivo.
Compatibilidad con Algoritmos y Bibliotecas:
Algunas bibliotecas y algoritmos pueden esperar que los datos se proporcionen en un formato
específico. La transposición puede ser necesaria para que tus datos sean compatibles con estas
bibliotecas o algoritmos.
Reducción de Dimensionalidad:
En algunas situaciones, la transposición puede utilizarse como parte de un proceso de reducción de
dimensionalidad o preprocesamiento de datos.
Análisis de Datos Longitudinales:
En el análisis de datos longitudinales o de series temporales, la transposición puede ser útil para cambiar
entre una representación de "ancho" y una representación "larga" de los datos.
·
.T() o .transpose()
Código Python
datos = {
"ingreso":[10,9,8,7,6,5,4,3,2,1,0],
"locker" :[100,109,118,207,96,350,240,301,200,250,300],
"sueldo" :[210,211,212,213,214,215,216,217,218,219,220],
"nombre" :
["Ariel","Betty","Caro","Dany","Ester","Fran","Gaby","Hector","Ines","Julia", "Kary"]
}
df = pd.DataFrame(datos)
print(f"original=\n{df}")
Salida esperada por consola
original=
ingreso locker sueldo nombre
A 10 100 210 Ariel
B 9 109 211 Betty
C 8 118 212 Caro
D 7 207 213 Dany
E 6 96 214 Ester
F 5 350 215 Fran
G 4 240 216 Gaby
H 3 301 217 Hector
I 2 200 218 Ines
J 1 250 219 Julia
K 0 300 220 Kary
Código Python
print(f"df Transpuesta=\n{df.T}")
Salida esperada por consola
df Transpuesta=
A B C D E F G H I J K
ingreso 10 9 8 7 6 5 4 3 2 1 0
locker 100 109 118 207 96 350 240 301 200 250 300
sueldo 210 211 212 213 214 215 216 217 218 219 220
nombre Ariel Betty Caro Dany Ester Fran Gaby Hector Ines Julia Kary
·
df.sort_values(by='columna')
El método df.sort_values(by='columna') en Pandas se utiliza para ordenar un DataFrame en función de los
valores de una columna específica. Esta operación es útil para organizar los datos en un orden específico, lo que
facilita la exploración y el análisis de los datos. Aquí está una descripción detallada de cómo funciona:
Sintaxis:
df.sort_values(by, axis=0, ascending=True, inplace=False, ignore_index=False, key=None)
by: Especifica la columna por la cual deseas ordenar el DataFrame. Debe proporcionarse el nombre de
la columna.
axis: Indica si deseas ordenar las filas (axis=0, por defecto) o las columnas (axis=1) del DataFrame. En
este caso, se usa axis=0 para ordenar las filas.
ascending: Un valor booleano o una lista de valores booleanos que indica si deseas ordenar en orden
ascendente (True) o descendente (False). Por defecto, es True, lo que significa que se ordenarán en orden
ascendente.
inplace: Un valor booleano que determina si deseas realizar la ordenación en el lugar (modificar el
DataFrame original) o si deseas devolver un nuevo DataFrame ordenado. Por defecto, es False.
ignore_index: Un valor booleano que controla si deseas restablecer el índice después de la ordenación.
Por defecto, es False.
key: Una función que se utiliza para personalizar la ordenación, por ejemplo, para ordenar basándose en
una función de transformación de valores en lugar de los valores reales. Por defecto, es None.
·
df.sort_values(by='columna')
Código Python
datos = {
"ingreso":[10,9,8,7,6,5,4,3,2,1,0],
"locker" :[100,109,118,207,96,350,240,301,200,250,300],
"sueldo" :[210,211,212,213,214,215,216,217,218,219,220],
"nombre" :
["Ariel","Betty","Caro","Dany","Ester","Fran","Gaby","Hector","Ines","Julia", "Kary"]
}
df = pd.DataFrame(datos)
print(f"original=\n{df}")
Código Python
salida = df.sort_values(by="nombre")
print(f"salida=\n{salida}")
Código Python
salida = df.sort_values(by="nombre" , ascending=False)# para ordenar en orden descendente
print(f"salida=\n{salida}")
·
Concat
Para agregar filas o columnas en un DataFrame existente, primero debes crear un nuevo DataFrame que
contenga lo que deseas agregar y luego utilizar pd.concat para combinar ambos DataFrames.
Los DataFrames deben tener las mismas cantidad de columnas y que los nombres de las columnas tienen que
coincidir.
·
df.concat( [ df_1 , df_2 ] )
Código Python
datos = {
"ingreso":[10,9,8,7,6,5,4,3,2,1,0],
"locker" :[100,109,118,207,96,350,240,301,200,250,300],
"sueldo" :[210,211,212,213,214,215,216,217,218,219,220],
"nombre" :
["Ariel","Betty","Caro","Dany","Ester","Fran","Gaby","Hector","Ines","Julia", "Kary"]
}
df = pd.DataFrame(datos)
print(f"original=\n{df}")
Código Python
ingreso = {
"ingreso":[11],
"locker" :[275],
"sueldo" :[230],
"nombre" :["Joaquin"]
}
fila_nueva = pd.DataFrame(ingreso)
df_concat = pd.concat([df, fila_nueva], ignore_index=True)
Salida esperada por consola
salida=
ingreso locker sueldo nombre
0 10 100 210 Ariel
1 9 109 211 Betty
2 8 118 212 Caro
3 7 207 213 Dany
4 6 96 214 Ester
5 5 350 215 Fran
6 4 240 216 Gaby
7 3 301 217 Hector
8 2 200 218 Ines
9 1 250 219 Julia
10 0 300 220 Kary
11 11 275 230 Joaquin < - - - - - - - - -fila Agregada
·
Código Python
dic = {
"Argentina": "Buenos Aires",
"Bolivia": "La Paz",
"Brasil": "Brasilia",
"Chile": "Santiago",
"Colombia": "Bogotá",
"Ecuador": "Quito",
"Guyana": "Georgetown",
"Paraguay": "Asunción",
"Perú": "Lima",
"Surinam": "Paramaribo",
"Uruguay": "Montevideo",
"Venezuela": "Caracas"}
df_concat["pais"]=dic.keys()
df_concat["ciudad"]=dic.values()
·
Código Python
·
·
import pandas as pd
data = {'Vendedor': ['Alice', 'Bob', 'Alice', 'Alice', 'Bob'],
'Producto': ['A', 'B', 'A', 'C', 'B'],
'Venta': [100, 200, 150, 300, 250]}
df = pd.DataFrame(data)
```
Si deseamos agrupar las ventas por vendedor y calcular la suma de las ventas para cada vendedor, podemos
hacerlo de la siguiente manera:
```python
grupo = df.groupby('Vendedor')
total_ventas_por_vendedor = grupo['Venta'].sum()
```
El resultado será un nuevo objeto `Series` que muestra la suma de las ventas por vendedor:
```
Vendedor
Alice 550
Bob 450
Name: Venta, dtype: int64
```
Puedes realizar varias operaciones de agregación en grupos, como `sum()`, `mean()`, `count()`, `min()`, `max()`,
etc. Por ejemplo, si deseas calcular el promedio de ventas por producto:
```python
grupo = df.groupby('Producto')
promedio_ventas_por_producto = grupo['Venta'].mean()
```
El resultado será:
```
Producto
A 125.0
B 225.0
C 300.0
Name: Venta, dtype: float64
```
También puedes agrupar por múltiples columnas proporcionando una lista de nombres de columnas al método
`groupby`. Por ejemplo, para agrupar por vendedor y producto:
```python
grupo = df.groupby(['Vendedor', 'Producto'])
total_ventas_por_vendedor_producto = grupo['Venta'].sum()
```
El resultado mostrará la suma de las ventas para cada combinación de vendedor y producto.
df.groupby('columna').agg({'columna2': 'función'}):
Permite agrupar datos por una columna y aplicar una función de agregación a otra columna.
resumen = df.groupby('A').agg({'B': 'sum'})
El método to_sql en Pandas se utiliza para guardar los datos de un DataFrame en una base de datos
SQL. Permite escribir los contenidos de un DataFrame en una tabla específica de una base de datos
relacional utilizando una conexión a la base de datos.
python
DataFrame.to_sql(name, con, schema=None, if_exists='fail', index=True, index_label=None,
chunksize=None, dtype=None)
- name: Especifica el nombre de la tabla en la base de datos donde se guardarán los datos del
DataFrame.
- con: Representa la conexión a la base de datos. Puedes proporcionar una conexión SQLAlchemy o
un objeto SQLite. También puedes proporcionar una cadena de conexión que describe la ubicación
de la base de datos. Por ejemplo, para SQLite, puedes especificar un archivo SQLite como
'sqlite:///mydatabase.db'.
- schema (opcional): Especifica el esquema en la base de datos donde se guardará la tabla. Por
defecto, es None, lo que significa que se usará el esquema predeterminado.
- if_exists (opcional): Determina qué hacer si la tabla ya existe en la base de datos. Puede tomar uno
de los siguientes valores:
- 'fail' (predeterminado): Genera un error si la tabla ya existe.
- 'replace': Reemplaza la tabla existente con los datos del DataFrame.
- 'append': Agrega los datos del DataFrame a la tabla existente.
- index (opcional): Controla si se debe incluir el índice del DataFrame como una columna en la
tabla de la base de datos. De forma predeterminada, es True.
- chunksize (opcional): Define el número de filas que se insertarán en la base de datos a la vez. Esto
puede ser útil para controlar el uso de memoria al insertar grandes cantidades de datos.
- dtype (opcional): Permite especificar el tipo de datos que se utilizará en la base de datos para cada
columna. Puede ser un diccionario que mapee nombres de columna a tipos de datos SQL.
python
from sqlalchemy import create_engine
En este ejemplo, se crea una conexión a una base de datos SQLite y se utiliza to_sql para guardar el
DataFrame df en una tabla llamada 'mi_tabla'. La opción if_exists se establece en 'replace' para
reemplazar la tabla si ya existe, y el índice del DataFrame se excluye (index=False) al guardar los
datos en la tabla.