Code mit zwei for Schleifen zu langsam

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Brando
User
Beiträge: 171
Registriert: Donnerstag 28. Januar 2016, 15:36

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?
Brando
User
Beiträge: 171
Registriert: Donnerstag 28. Januar 2016, 15:36

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?
Benutzeravatar
YAPD
User
Beiträge: 120
Registriert: Dienstag 27. Juli 2021, 23:23
Wohnort: Frankfurt am Main

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
-----
Yet Another Python Developer
Benutzeravatar
__blackjack__
User
Beiträge: 14056
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten