es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo ordenar un archivo CSV para que mis columnas estén en orden descendente?

Estoy tratando de ordenar mi archivo CSV para que los equipos con más medallas de oro, plata y bronce estén en la parte superior de la lista y aquellos con menos estén en la parte inferior.

def rank_team(file_name):
    import csv

    file = open('medal.csv')
    for line in file:
        print(line)

    pass

rank_team('medal.csv')

Este es el código que tengo ahora. Solo quiero saber cómo puedo ordenarlo todo.

Este es el CSV que estoy utilizando.
CSV utilizado para ordenar

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para ordenar un archivo CSV en función de columnas específicas, puede usar la función sorted() en Python. Primero, debería leer el archivo CSV utilizando la función csv.reader(), y luego convertirlo en una lista utilizando la función list(). Una vez que tenga la lista, puede usar la función sorted() para ordenarla en función de la columna por la que desea ordenar.

    Aquí hay un ejemplo de fragmento de código que muestra cómo ordenar el archivo CSV en función del número total de medallas (suma de medallas de oro, plata y bronce), en orden descendente:

    import csv
    
    def rank_team(file_name):
        with open(file_name, 'r') as csvfile:
            csvreader = csv.reader(csvfile)
            data = list(csvreader)
            header = data[0]
            # obtener el índice de las columnas para las medallas de oro, plata y bronce
            gold_idx = header.index('Gold')
            silver_idx = header.index('Silver')
            bronze_idx = header.index('Bronze')
            # calcular el número total de medallas para cada equipo
            totals = {}
            for row in data[1:]:
                team = row[0]
                gold = int(row[gold_idx])
                silver = int(row[silver_idx])
                bronze = int(row[bronze_idx])
                total = gold + silver + bronze
                totals[team] = total
            # ordenar los equipos en función de su número total de medallas
            sorted_teams = sorted(totals.items(), key=lambda x: x[1], reverse=True)
            # imprimir la lista ordenada de equipos
            for team in sorted_teams:
                print(team[0], team[1])
    
    rank_team('medal.csv')
    

    En este código, primero leemos el archivo CSV utilizando csv.reader() y luego lo convertimos en una lista utilizando list(). Luego calculamos el número total de medallas para cada equipo y lo almacenamos en un diccionario llamado totals, donde las claves son los nombres de los equipos y los valores son el número total de medallas.

    Luego usamos la función sorted() para ordenar el diccionario totals en función de los valores (es decir, el número total de medallas), en orden descendente. El argumento key=lambda x: x[1] especifica que queremos usar los valores (es decir, x[1]) como clave de ordenación.

    Finalmente, iteramos a través de la lista ordenada de equipos e imprimimos el nombre del equipo y su número total de medallas.

Comments are closed.