Uso básico de pandas - Funciones comunes
Registro de funciones utilizadas frecuentemente en pandas y sus funcionalidades
Funciones comunes
Visualización de las primeras N filas
df.head() # Muestra las primeras 5 filas
df.head(10) # Muestra las primeras 10 filas
Visualización de las últimas N filas
df.tail() # Muestra las últimas 5 filas
df.tail(10) # Muestra las últimas 10 filas
Consulta de índices
df.index # Obtiene los índices del DataFrame
Consulta de nombres de columnas
df.columns # Obtiene los nombres de las columnas
df.keys() # Obtiene los nombres de las columnas
# keys() es equivalente a columns
Ordenamiento por ejes X e Y
df.sort_index(axis='index', ascending=True) # Ordena por el eje X (índice) en orden ascendente
df.sort_index(axis='index', ascending=False) # Ordena por el eje X (índice) en orden descendente
df.sort_index(axis='columns', ascending=True) # Ordena por el eje Y (columnas) en orden ascendente
df.sort_index(axis='columns', ascending=False) # Ordena por el eje Y (columnas) en orden descendente
Ordenar por el eje X significa ordenar según los índices.
Ordenar por el eje Y significa ordenar según los nombres de las columnas.
Ejemplo de código para las funciones anteriores:
import pandas as pd
from pandas import DataFrame
def view_data(df):
data = df.head() # Muestra las primeras 5 filas
print(data)
print("*" * 50)
data = df.head(10) # Muestra las primeras 10 filas
print(data)
print("*" * 50)
data = df.tail() # Muestra las últimas 5 filas
print(data)
print("*" * 50)
data = df.tail(10) # Muestra las últimas 10 filas
print(data)
print("*" * 50)
def inspect_index_columns(df: DataFrame):
index = df.index # Obtiene los índices
print(index)
columns = df.columns # Obtiene los nombres de las columnas
print(columns)
keys = df.keys() # Obtiene los nombres de las columnas
print(keys)
print(df.columns is df.keys()) # keys() es equivalente a columns
def sort_by_index(df: DataFrame):
# axis : {0 o 'index', 1 o 'columns'}, predeterminado 0
print(df)
print("*" * 50)
result = df.sort_index(axis='index', ascending=True) # Ordena por el eje X en orden ascendente
print(result)
print("*" * 50)
result = df.sort_index(axis='index', ascending=False) # Ordena por el eje X en orden descendente
print(result)
def sort_by_columns(df: DataFrame):
# axis : {0 o 'index', 1 o 'columns'}, predeterminado 0
print(df)
print("*" * 50)
result = df.sort_index(axis='columns', ascending=True) # Ordena por el eje Y en orden ascendente
print(result)
print("*" * 50)
result = df.sort_index(axis='columns', ascending=False) # Ordena por el eje Y en orden descendente
print(result)
def main():
df: DataFrame = pd.read_csv("csvs/Src-Affairs.csv") # Retorna un objeto DataFrame bidimensional
# view_data(df)
# inspect_index_columns(df)
df2 = df[:5]
# sort_by_index(df2)
sort_by_columns(df2)
if __name__ == '__main__':
main()
Selección de una fila específica
df.loc[RangeIndex(1)] # Índice de tipo RangeIndex, selecciona la primera fila sin reducir dimensionalidad
df.loc[0] # Índice de tipo RangeIndex, selecciona la primera fila con reducción dimensional
df.loc[RangeIndex(start=5, stop=6)] # Selecciona la quinta fila sin reducir dimensionalidad
df.loc[5] # Selecciona la quinta fila con reducción dimensional
Selección de filas mediante slicing
df[1:3] # Selecciona desde la fila 1 hasta la 3 (excluyendo la 3), como en Python
df[1:] # Selecciona desde la fila 1 hasta el final
df[:5] # Selecciona desde el inicio hasta la fila 5 (excluyendo la 5)
df[:] # Selecciona todas las filas
Selección de una columna
df['gender'] # Selección mediante notación de diccionario
df.gender # Selección mediante notación de atributo
# df['gender'] es equivalente a df.gender
Selección de múltiples columnas
df.loc[:, ['affairs', 'gender', 'education']] # Uso de loc[:,] donde los dos puntos representan todas las filas
Selección simultánea de filas y columnas
df.loc[[1, 2, 4], ['affairs', 'gender']]
df.loc[1:5, ['affairs', 'education']]
df.loc[:, ['affairs', 'gender', 'education']]
df.loc[6:, ['affairs', 'gender', 'education']]
df.loc[:5, ['affairs', 'gender', 'education']]
Nota:
① La sintaxis es [filas, columnas], donde las filas pueden ser un slice o lista, y las columnas pueden ser una lista.
② Se puede usar iloc en lugar de loc, con la diferencia de que iloc usa índices numéricos en lugar de etiquetas.
df.iloc[[1, 2, 4], [1, 2, 3]]
df.iloc[1:5, 2:]
df.iloc[:, :5]
df.iloc[6:, 2:5]
df.iloc[:5, :]
Acceso al valor en una posición específica
df.at[1, 'gender'] # Valor en la fila 1, columna 'gender'
df.at[5, 'education'] # Valor en la fila 5, columna 'education'
df.iat[5, 3] # Valor en la fila 5, columna 3
df.iat[3, 8] # Valor en la fila 3, columna 8
Nota:
① iat es similar a iloc, requiere índices numéricos.
② at es similar a loc, permite pasar directamente nombre de índice y columna.
Ejemplo de código para las funciones mencionadas:
import pandas as pd
from pandas import DataFrame, RangeIndex
def select_single_row(df: DataFrame):
data = df.loc[RangeIndex(1)] # Selección de la primera fila sin reducir dimensionalidad
print(data)
print("*" * 50)
data = df.loc[0] # Selección de la primera fila con reducción dimensional
print(data)
print("*" * 50)
data = df.loc[RangeIndex(start=5, stop=6)] # Selección de la quinta fila sin reducir dimensionalidad
print(data)
print("*" * 50)
data = df.loc[5] # Selección de la quinta fila con reducción dimensional
print(data)
print("*" * 50)
def select_rows(df: DataFrame):
print(df)
print("*" * 50)
data = df[1:3] # Selección de filas desde la 1 hasta la 3 (excluyendo la 3)
print(data)
print("*" * 50)
data = df[1:] # Selección desde la fila 1 hasta el final
print(data)
print("*" * 50)
data = df[:5] # Selección desde el inicio hasta la fila 5 (excluyendo la 5)
print(data)
print("*" * 50)
data = df[:] # Selección de todas las filas
print(data)
def select_single_column(df: DataFrame):
gender = df['gender'] # Selección mediante notación de diccionario
print(gender)
print("*" * 50)
other = df.gender # Selección mediante notación de atributo
print(other)
print("*" * 50)
print(gender is other) # df['gender'] es equivalente a df.gender
def select_columns(df: DataFrame):
print(df)
print("*" * 50)
data = df.loc[:, ['affairs', 'gender', 'education']] # Selección de columnas específicas
print(data)
def select_rows_and_columns(df: DataFrame):
print(df)
print("*" * 50)
data = df.loc[[1, 2, 4], ['affairs', 'gender']]
print(data)
print("*" * 50)
data = df.loc[1:5, ['affairs', 'education']]
print(data)
print("*" * 50)
data = df.loc[:, ['affairs', 'gender', 'education']]
print(data)
print("*" * 50)
data = df.loc[6:, ['affairs', 'gender', 'education']]
print(data)
print("*" * 50)
data = df.loc[:5, ['affairs', 'gender', 'education']]
print(data)
print("*" * 50)
def select_rows_and_columns2(df: DataFrame):
print(df)
print("*" * 50)
data = df.iloc[[1, 2, 4], [1, 2, 3]]
print(data)
print("*" * 50)
data = df.iloc[1:5, 2:]
print(data)
print("*" * 50)
data = df.iloc[:, :5]
print(data)
print("*" * 50)
data = df.iloc[6:, 2:5]
print(data)
print("*" * 50)
data = df.iloc[:5, :]
print(data)
print("*" * 50)
def access_values(df: DataFrame):
print(df)
print("*" * 50)
data = df.at[1, 'gender'] # Valor en la fila 1, columna 'gender'
print(data)
print("*" * 50)
data = df.at[5, 'education'] # Valor en la fila 5, columna 'education'
print(data)
print("*" * 50)
data = df.iat[5, 3] # Valor en la fila 5, columna 3
print(data)
print("*" * 50)
data = df.iat[3, 8] # Valor en la fila 3, columna 8
print(data)
print("*" * 50)
def main():
df: DataFrame = pd.read_csv("csvs/Src-Affairs.csv") # Retorna un objeto DataFrame bidimensional
# select_single_column(df)
df2 = df[:10]
# select_rows(df2)
# select_single_row(df2)
# select_columns(df2)
# select_rows_and_columns(df2)
access_values(df2)
if __name__ == '__main__':
main()
github