Para ordenar archivos, particularmente CSV o archivos separados por tabulaciones o espacios, usamos Pandas y ordenamos los datos. Porque Pandas proporciona múltiples funciones para lograr lo mismo. Pero una cosa de la que debemos darnos cuenta aquí es que los pandas están diseñados para conjuntos de datos más grandes y no para archivos más pequeños. Para archivos pequeños, incluso podemos usar las funciones integradas proporcionadas por python, y no es necesario instalar bibliotecas adicionales como Pandas para obtener las requeridas.
La razón principal para escribir este artículo es mostrar cómo podemos usar funciones integradas como sort para ordenar archivos más pequeños que tienen menos de 10 000 líneas de la manera requerida y aun así obtener lo que queremos. En este artículo, entenderemos cómo usar la función de clasificación para personalizar la clasificación de acuerdo con nuestros requisitos en lugar de confiar en la clasificación inteligente de elementos predeterminada proporcionada por la función.
Ordenar es una función de lista integrada en Python que puede ordenar cualquier objeto en su lugar, como números enteros, flotantes, strings en orden ascendente o descendente. Además de eso, proporciona un atributo especial llamado «clave» mediante el cual podemos personalizar la clasificación. Al atributo «clave» podemos pasar una función de una sola línea como Lambda o una función definida por el usuario.
Sintaxis:
sort(self, /, *, key=None, reverse=False)
Entendamos cómo usar la función de clasificación del tipo de datos de lista aplicando dos tipos comunes de datos que vemos en general, es decir, datos numéricos y categóricos.
Método 1#: ¿Cómo ordenar datos numéricos usando la función de clasificación?
Descargue el archivo MallSalesData.csv desde el enlace de github en su directorio actual y guárdelo como MallSalesData.csv. luego, el archivo de muestra MallSalesData.csv descargado tiene información sobre los datos de ventas en la tienda Mart que contiene campos como el código del producto, la descripción de la producción y el precio del producto. En el siguiente código, usaremos la función de clasificación para clasificar el archivo CSV descargado por precio en orden ascendente.
Python3
def my_sort(line): line_fields = line.strip().split(',') amount = float(line_fields[2]) return amount # opening file MallSalesData.csv # and getting contents into a list fp = open('MallSalesData.csv') contents = fp.readlines() # sorting using our custom logic contents.sort(key=my_sort) # printing the sorting contents to stdout for line in contents: print(line) fp.close()
Producción:
22633,HAND WARMER UNION JACK,11.1 22632,HAND WARMER RED POLKA DOT,11.1 85123A,WHITE HANGING HEART T-LIGHT HOLDER,15.3 22752,SET 7 BABUSHKA NESTING BOXES,15.3 71053,WHITE METAL LANTERN,20.34 84029G,KNITTED UNION FLAG HOT WATER BOTTLE,20.34 84029E,RED WOOLLY HOTTIE WHITE HEART,20.34 84406B,CREAM CUPID HEARTS COAT HANGER,22 21730,GLASS STAR FROSTED T-LIGHT HOLDER,25.5 84879,ASSORTED COLOUR BIRD ORNAMENT,54.08
En lo anterior, puede ver que estamos definiendo nuestra propia lógica personalizada, es decir, la función my_sort que guía la función de clasificación para clasificar un campo en particular, como el precio, para clasificar los registros. Puede ver en el resultado anterior que todo el archivo está ordenado según el campo de precio.
¿Como funciona esto?
- Cuando usamos el atributo clave en la función sort() cada vez que un elemento de la lista que es un registro de compra del cliente en este caso se pasa a nuestra función my_sort().
- La función my_sort dividirá el registro por coma, obtendrá el precio y lo almacenará en la variable de cantidad.
- La variable de cantidad se devuelve además como el valor de retorno de la función my_sort() que utiliza sort() para ordenar los registros.
- Esto significa que cada vez que la función sort() vea el valor de cantidad() en números para ordenar los registros.
Método 2#: ¿Cómo ordenar datos categóricos usando la función de clasificación?
1. Descargue el archivo Vuelos.txt desde el enlace de github en su directorio actual y guarde el nombre del archivo como Vuelos.txt. El archivo de muestra Vuelos.txt descargado tiene información sobre los pasajeros del vuelo, como el número de boleto, el nombre del pasajero, el código del boleto y la clase de cabina en la que viajan. En el siguiente código, usaremos la función de clasificación para ordenar el archivo de texto descargado según su clase de cabina. Eso es ECONOMÍA seguido de ECONOMÍA PREMIUM seguido de BUSINESS seguido de PRIMERA CLASE.
Python3
def my_sort(line): flight_class = {'ECONOMY': 1, 'PREMIUMECONOMY': 2, 'BUSINESS': 3, 'FIRSTCLASS': 4} line_fields = line.strip().split() cabin_class = line_fields[-1] return flight_class[cabin_class] # reading flights.csv and storing in list # variable contents fp = open('Flights.txt') contents = fp.readlines() # sorting based on categorical variable cabin class contents.sort(key=my_sort) # displaying contents on stdout after sorting for line in contents: print(line) fp.close()
Producción:
001 AALAM SAMIMI/MOJGAN MRS 5SZKUU ECONOMY 007 AFSHAR GHAHREMANKHANI/ARA ZYA4NT ECONOMY 010 AHMADI SOBHANI/JALEH MS 2ASCHO ECONOMY 002 ABDOLI/AHMAD DR MR 5AMBNC PREMIUMECONOMY 008 AFSHARGHAHREMANKHANI/ALI 8CP4YE PREMIUMECONOMY 003 ABDOLLAHIMOTLAGHSOMEHSA/M 6VXREM BUSINESS 009 AFSHARGHAHREMANKHANI/ARIA 8CQFCB BUSINESS 004 AFRASIABI/HASSAN MR 2Y24ER FIRSTCLASS 005 AFSHAR BAKESHLOO/LIDA MRS 8CQFCB FIRSTCLASS 006 AFSHAR GHAHREMANKHANI/ALI 25KO4X FIRSTCLASS
En lo anterior, puede ver que hemos definido nuestra lógica personalizada, es decir, la función my_sort que guía la función de clasificación para clasificar en una variable categórica llamada clase de cabina. Puede ver en el resultado anterior que el archivo completo está ordenado en el último campo, es decir, clase de cabina, donde puede observar que los registros están ordenados con ECONOMY seguido de PREMIUM ECONOMY seguido de BUSINESS seguido de FIRST CLASS.
¿Como funciona esto?
- Cuando usamos el atributo clave en la función sort() cada vez que un elemento de la lista que es información de pasajeros que viajan en vuelo se pasa a nuestra función my_sort().
- La función my_sort dividirá el registro por espacio y buscará el último campo, que es clase de cabina, en la variable cabina_clase.
- También hemos definido un diccionario clase_vuelo en el que definimos el orden de la clase de cabina de acuerdo con nuestros requisitos, es decir, ECONÓMICO a 1, ECONÓMICO PREMIUM a 2, y así sucesivamente. Esto nos ayudará a enviar el orden que queramos para ordenar estos valores categóricos.
- Una vez que obtengamos cabin_class de cada registro, comprobaremos en el diccionario flight_class cuál es la prioridad de orden mencionada y pasaremos ese valor como valor de retorno a la función sort().
- Esto significa que cada vez que la función sort() verá la prioridad de orden definida para la clase de cabina de vuelo y ordenará los registros en consecuencia.
De esta manera, podemos personalizar cualquier tipo de funcionalidad de clasificación simplemente usando las funciones básicas proporcionadas por python. Del mismo modo, podemos personalizar max, min y otras funciones integradas de python para realizar las operaciones de acuerdo con nuestros requisitos.