Seite 1 von 1

Code mit zwei for Schleifen zu langsam

Verfasst: Dienstag 10. August 2021, 13:16
von Brando
Folgender Code ist zu langsam bei einer langen csv Datei:

Code: Alles auswählen

import pandas as pd
from datetime import date

df = pd.read_csv('data/C2A2_data/BinnedCsvs_d400/fb441e62df2d58994928907a91895ec62c2c42e6cd075c2700843b89.csv')
data_low =[]
data_high = []
value_low =[]
value_high = []
second_date = date(2015,1,1)
for index, row in df.iterrows():
    fd = row["Date"].split("-")
    first_date = date(int(fd[0]), int(fd[1]), int(fd[2]))
    if first_date < second_date and row["Element"] == "TMIN": 
        if first_date not in data_low:
            data_low.append(first_date)
            v_l = 1000
            for index, row in df.iterrows():
                fd_intern = row["Date"].split("-")
                first_date_intern = date(int(fd[0]), int(fd[1]), int(fd[2]))
                if first_date_intern == first_date:
                    if row["Data_Value"] < v_l:
                        v_l = row["Data_Value"]
            value_low.append(v_l)
print ("Data size ist:", len(data_low))
print ("Value Size ist:", len(value_low))
Mir wäre schon viel geholfen, wenn ich die zweite Schleife erst dort einsetzen lasse wo sich die erste Schleife befindet?
Oder gibt es für csv Dateien Funktionen, mit denen man zu einem gleichen Datum den zugehörigen minimalen Wert ausgeben kann?

Re: Code mit zwei for Schleifen zu langsam

Verfasst: Dienstag 10. August 2021, 14:23
von Brando
Intern wird das wohl so realisiert:

Code: Alles auswählen

low_sector = df.loc[df["Element"]=="TMIN", :]
result_low = low_sector.groupby(["Date"])["Data_Value"].min()
Und das Ergebnis ist in Bruchteilen einer Sekunde verfügbar! Ich frage mich bloß wie das intern realisiert wurde? Nicht etwa mein ursprünglicher Code?

Re: Code mit zwei for Schleifen zu langsam

Verfasst: Dienstag 10. August 2021, 17:13
von YAPD
Hi Brando,

erstmal vorab. Wie groß ist die Datei denn, bzw.
ab welcher Größe dauert es zu lange ? Wie ist
die Datei denn aufgebaut. Könntest du ein
Code Snippet posten ?

VG
YAPD

Re: Code mit zwei for Schleifen zu langsam

Verfasst: Dienstag 10. August 2021, 18:11
von __blackjack__
@Brando: Was meinst Du mit ”Intern wird das wohl so realisiert”? Falls diese beiden Zeilen das machen was Du willst, warum dann den ganzen Kram noch mal in *Python* implementieren? Hervorhebung von Python weil Pandas so schnell ist, weil das nicht in Python implementiert ist. Soll ja *schnell* sein.