Finde maximale Nummer in der .CSV-Datei in Python

Ich habe eine .csv-Datei, die, wenn in Excel geöffnet, sieht so aus: Bildbeschreibung hier eingeben

Mein Code:

myfile = open("/Users/it/Desktop/Python/In-Class Programs/countries.csv", "rb") countries = [] for item in myfile: a = item.split(",") countries.append(a) hdi_list = [] for acountry in countries: hdi = acountry[3] try: hdi_list.append(float(hdi)) except: pass average = round(sum(hdi_list)/len(hdi_list), 2) maxNumber = round(max(hdi_list), 2) minNumber = round(min(hdi_list), 2) 

Dieser Code funktioniert aber gut, wenn ich die max, min oder avg finde, muss ich den entsprechenden Namen des Landes packen und das auch ausdrucken.

Wie kann ich meinen Code ändern, um den Ländernamen der min, max, avg auch zu holen?

3 Solutions collect form web for “Finde maximale Nummer in der .CSV-Datei in Python”

Der folgende Ansatz ist nah genug, um Ihre Umsetzung, die ich denke, es könnte nützlich sein. Allerdings, wenn Sie anfangen, mit größeren oder komplizierteren csv-Dateien zu arbeiten, sollten Sie in Pakete wie "csv.reader" oder "Pandas" (wie bereits erwähnt) schauen. Sie sind robuster und effizienter bei der Arbeit mit komplexen .csv Daten. Sie können auch mit Excel mit dem "xlrd" Paket arbeiten.

Meiner Meinung nach ist die einfachste Lösung, um Ländernamen mit ihren jeweiligen Werten zu datieren, Ihre "Loops" zu kombinieren. Anstatt die Daten zweimal zu durchschleifen (in zwei separaten "Loops") und zwei separate Listen zu erstellen, verwenden Sie eine einzelne "for loop" und erstellen Sie ein Wörterbuch mit relevanten Daten (zB "country name", "hdi"). Du könntest auch ein Tupel erstellen (wie bereits erwähnt), aber ich denke, Wörterbücher sind expliziter.

 myfile = open("/Users/it/Desktop/Python/In-Class Programs/countries.csv", "rb") countries = [] for line in myfile: country_name = line.split(",")[1] value_of_interest = float(line.split(",")[3]) countries.append( {"Country Name": country_name, "Value of Interest": value_of_interest}) ave_value = sum([country["Value of Interest"] for country in countries])/len(countries) max_value = max([country["Value of Interest"] for country in countries]) min_value = min([country["Value of Interest"] for country in countries]) print "Country Average == ", ave_value for country in countries: if country["Value of Interest"] == max_value: print "Max == {country}:{value}".format(country["Country Name"], country["Value of Interest"]) if country["Value of Interest"] == min_value: print "Min == {country}:{value}".format(country["Country Name"], country["Value of Interest"]) 

Beachten Sie, dass diese Methode mehrere Länder zurückgibt, wenn sie gleiche Min / Max-Werte haben.

Wenn du bei der Erstellung von separaten Listen (wie dein aktueller Implementierung) tot ist, kannst du zip () betrachten, um deine Listen (nach Index) zu verbinden, wo

 zip(countries, hdi_list) = [(countries[1], hdi_list[1]), ...] 

Beispielsweise:

 for country in zip(countries, hdi_list): if country[1] == max_value: print country[0], country[1] 

Mit ähnlicher Logik auf den min und den Durchschnitt angewendet. Diese Methode funktioniert, ist aber weniger explizit und schwieriger zu pflegen.

Anstatt die Werte direkt in die Liste zu setzen, verwenden Sie Tupel stattdessen wie folgt:

 hdi_list.append((float(hdi), acountry[1])) 

Dann können Sie das stattdessen verwenden:

 maxTuple = max(hdi_list) maxNumber = round(maxTuple[0], 2) maxCountry = maxTuple[1] 

Mit dem pandas Modul, [4] , [5] und [6] unten sollte der Maximal-, Min- und Mittelwert angezeigt werden. Beachten Sie, dass die unten aufgeführten Daten nicht mit Ihrem Land übereinstimmen.

 In [1]: import pandas as pd In [2]: df = pd.read_csv("hdi.csv") In [3]: df Out[3]: Country HDI 0 Norway 83.27 1 Australia 80.77 2 Netherlands 87.00 3 United States 87.43 4 New Zealand 87.43 5 Canada 87.66 6 Ireland 75.47 7 Liechtenstein 88.97 8 Germany 86.31 9 Sweden 80.54 In [4]: df.ix[df["HDI"].idxmax()] Out[4]: Country Liechtenstein HDI 88.97 Name: 7, dtype: object In [5]: df.ix[df["HDI"].idxmin()] Out[5]: Country Ireland HDI 75.47 Name: 6, dtype: object In [6]: df["HDI"].mean() Out[6]: 84.484999999999985 

Angenommen, Liechtenstein und Germany haben Maximalwerte:

 In [15]: df Out[15]: Country HDI 0 Norway 83.27 1 Australia 80.77 2 Netherlands 87.00 3 United States 87.43 4 New Zealand 87.43 5 Canada 87.66 6 Ireland 75.47 7 Liechtenstein 88.97 8 Germany 88.97 9 Sweden 80.54 In [16]: df[df["HDI"] == df["HDI"].max()] Out[16]: Country HDI 7 Liechtenstein 88.97 8 Germany 88.97 

Die gleiche Logik kann für den Minimalwert angewendet werden.

  • Erstellen Sie neue Token und Tupel aus bestehenden, basierend auf Bedingungen
  • Wie passe ich Vokale an?
  • Iterating über eine 2-dimensionale Python-Liste
  • Wie schließe ich die Funktionen mit einer for-Schleife?
  • Zuordnen Sie die Variable auf den ursprünglichen Wert (definiert vor der Schleife) am Anfang jeder Iteration in der Schleife
  • Faktorisierung einer Zahl in Python
  • Schleife rückwärts mit Indizes in Python?
  • Ablehnen oder Schleifen der Benutzereingabe, wenn zwei Bedingungen nicht erfüllt sind
  • Abflachen einer sehr verschachtelten Schleife
  • Wie kann ich Loop Scraping Daten für mehrere Seiten in einer Website mit Python und beautifulsoup4
  • Wie mache ich eine Schleife, die jeden Tag eines bestimmten Monats berücksichtigt?
  • Python ist die beste Programmiersprache der Welt.