Pandas Befehl Erklärung

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
Bl3nder
User
Beiträge: 139
Registriert: Freitag 3. Januar 2020, 17:07

Hallo zusammen,


Ich habe eine kurze Frage zu einer Code Zeile diese habe Ich aus einem Forum und macht auch genau das was Sie soll nur Ich verstehe leider nicht ganz wie Sie das macht und würde das gerne einmal erklärt haben:


Ich habe folgenden Dataframe: ( Die Beschriftungen 74 ,140 sind Kanalnummern und es ist normal das bei 74 Daten nicht vorhanden sind ( da es dort keine Messdaten gegeben hat )
daten_intervalle:
Bild


So nun wollte Ich gerne folgendes haben Ich habe ein bestimmten Intervall ( 1 Tag ) und Ich wollte das in diesem Tag der höchste Wert von 140 genommen wird und mir dann mit dem wert angezeigt wird von 74 :

Die Zeile die Ich aus dem Forum habe ist folgende:

daten_mit_intervallen.loc [daten_mit_intervallen.groupby( pd.Grouper( freq = 'D' ) ).idxmax().iloc [:, 0]]

Das Ergebnis sieht dann wie folgt aus:
Bild

Zusammengefasst:
Er nimmt die Rechte Spalte und sortiert diese nach dem Max Wert des Angegebenen Intervalls:

Fragen:

Wie macht er das Ich übergebe Ihn so ja den kompletten Datenframe woher weiß es das Ich die Rechte Spalte nach dem Maxwert Sortiert haben möchte und die anderen Werte sollen
dann so angegebenen werden wie Sie sind und nicht auch nach ihren Maxwerten sortiert werden?
Und wieso muss Ich iloc[:,0] am Ende nehmen



Versuchte Erklärungen:
Wenn Ich iloc[:0] mir vor der Bearbeitung anzeigen lass kommt nur die Spalte 74 ( was Ich verstehe) ist jetzt zu null geworden da Ich Pandas keine explizieten Spalten genannt habe die er gruppieren soll ( nimmt er dann alle) was bedeutet würde Ich hätte nur noch 1 Spalte -> was die 0te Stelle wäre? Das macht nur kein Sinn weil wenn ICh mir in Pycharm den Datenframe angucke steht bei beiden Datenframes (41760 = länge,2=Spalten),(29,2) das die länge weniger wird ist ja selbstverständlich.

Und die die default Einstellung von id.max() ist Reihenweise das verstehe Ich auch nur Ich Verstehe dort nicht wieso er das trotzdem dann nicht auch für Splate 74 macht.


Ich danke euch
Eine Vision ohne Aktion bleibe eine Illusion
Bl3nder
User
Beiträge: 139
Registriert: Freitag 3. Januar 2020, 17:07

Bild 1 : https://www.directupload.net/file/d/601 ... zg_png.htm

Bild2 : https://s12.directupload.net/images/201123/jjont8mf.png

p.s Kann mir bitte jemand zeigen wie Ich diese das nächste mal vernünftig in die vorgesehene Struktur einbette ?
Eine Vision ohne Aktion bleibe eine Illusion
Benutzeravatar
__blackjack__
User
Beiträge: 14053
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Bl3nder: Bilder von Textausgaben sollte man gar nicht als Bilder einbinden sondern einfach den Text in den Beitrag packen. Dann wäre die Warnung auch nicht abgeschnitten und man könnte die komplett lesen.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Bl3nder
User
Beiträge: 139
Registriert: Freitag 3. Januar 2020, 17:07

Aber dann bleibt die formatierung nicht erhalten -> Ich dachte es wäre dann leichter für euch das nachzuvollziehen ?
Eine Vision ohne Aktion bleibe eine Illusion
Bl3nder
User
Beiträge: 139
Registriert: Freitag 3. Januar 2020, 17:07

Datenframe Nachtrag:

daten_mit_intervall :

74 140
2020-02-01 00:00:00 11.8
2020-02-01 00:01:00 208 11.6
2020-02-01 00:02:00 219 9.0
2020-02-01 00:03:00 213 11.0
2020-02-01 00:04:00 217 10.7
... ... ...
2020-02-29 23:55:00 11.7
2020-02-29 23:56:00 13.7
2020-02-29 23:57:00 11.3
2020-02-29 23:58:00 10.3
2020-02-29 23:59:00 12.3



daten_sotiert_mit_max_Code:
74 140
2020-02-01 17:57:00 252 18.4
2020-02-02 01:34:00 251 16.6
2020-02-03 16:13:00 257 14.6
2020-02-04 06:57:00 248 12.1
2020-02-05 00:53:00 335 9.5
2020-02-06 03:15:00 249 7.9
2020-02-07 21:27:00 137 10.4
2020-02-08 16:35:00 212 11.8
2020-02-09 15:52:00 28.2
2020-02-10 08:29:00 25.6
2020-02-11 02:52:00 23.3
2020-02-12 07:11:00 20.7
2020-02-13 11:15:00 15.9
2020-02-14 22:40:00 10.2
2020-02-15 23:46:00 20.8
2020-02-16 17:30:00 26.2
2020-02-17 03:56:00 20.0
2020-02-18 14:10:00 17.5
2020-02-19 10:58:00 16.9
2020-02-20 19:32:00 18.9
2020-02-21 22:10:00 16.8
2020-02-22 18:09:00 24.1
2020-02-23 13:16:00 24.1
2020-02-24 22:49:00 17.9
2020-02-25 12:38:00 20.0
2020-02-26 13:18:00 15.4
2020-02-27 21:46:00 9.6
2020-02-28 18:42:00 17.1
2020-02-29 15:27:00 22.2
Eine Vision ohne Aktion bleibe eine Illusion
Benutzeravatar
__blackjack__
User
Beiträge: 14053
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Bl3nder: Es gibt da ja so Code-Tags die man benutzen könnte. 🙂
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Bl3nder
User
Beiträge: 139
Registriert: Freitag 3. Januar 2020, 17:07

Das habe Ich Versucht auch hier bleibt die Formatierung leider nicht erhalten:
daten_mit_intervall :

Code: Alles auswählen

daten_mit_intervall :

                                                 74 140
2020-02-01 00:00:00            11.8
2020-02-01 00:01:00 208   11.6
2020-02-01 00:02:00 219     9.0
2020-02-01 00:03:00 213   11.0
2020-02-01 00:04:00 217   10.7
... ... ...
2020-02-29 23:55:00            11.7
2020-02-29 23:56:00            13.7
2020-02-29 23:57:00            11.3
2020-02-29 23:58:00            10.3
2020-02-29 23:59:00            12.3
daten_sotiert_mit_max_Code:

Code: Alles auswählen

2020-02-01 17:57:00 252 18.4
2020-02-02 01:34:00 251 16.6
2020-02-03 16:13:00 257 14.6
2020-02-04 06:57:00 248 12.1
2020-02-05 00:53:00 335 9.5
2020-02-06 03:15:00 249 7.9
2020-02-07 21:27:00 137 10.4
2020-02-08 16:35:00 212 11.8
2020-02-09 15:52:00 28.2
2020-02-10 08:29:00 25.6
2020-02-11 02:52:00 23.3
2020-02-12 07:11:00 20.7
2020-02-13 11:15:00 15.9
2020-02-14 22:40:00 10.2
2020-02-15 23:46:00 20.8
2020-02-16 17:30:00 26.2
2020-02-17 03:56:00 20.0
2020-02-18 14:10:00 17.5
2020-02-19 10:58:00 16.9
2020-02-20 19:32:00 18.9
2020-02-21 22:10:00 16.8
2020-02-22 18:09:00 24.1
2020-02-23 13:16:00 24.1
2020-02-24 22:49:00 17.9
2020-02-25 12:38:00 20.0
2020-02-26 13:18:00 15.4
2020-02-27 21:46:00 9.6
2020-02-28 18:42:00 17.1
2020-02-29 15:27:00 22.2
Hätte den jemand bezüglich meiner Ursprünglichen Frage eine Antwort für mich ?
Eine Vision ohne Aktion bleibe eine Illusion
Bl3nder
User
Beiträge: 139
Registriert: Freitag 3. Januar 2020, 17:07

Ich habe den Datensatz mal hochgeladen:

https://www.file-upload.net/download-14 ... 2.wrt.html
Eine Vision ohne Aktion bleibe eine Illusion
Bl3nder
User
Beiträge: 139
Registriert: Freitag 3. Januar 2020, 17:07

Ich hoffe der Code entspricht nun mehr der Konvention

Code: Alles auswählen

from pathlib import Path
import pandas as pd

# Pfade:
ORDNER_MIT_DATEN = Path(r"C:\Users\Marcel\Desktop\Dieter_Klimareport\Dieter_Auswertung\Fertigdaten_2020_02.wrt")

# Kanal-Nummern: # Excel-Nummer +1 da Datum später weggenommen wird
KEIN_KANAL = 0
LUFTTEMPERATUR = 2
RELATIVE_LUFTFEUCHTIGKEIT = 289
MAX_TEMPERATUR = 249
MIN_TEMPERATUR = 248
NIEDERSCHLAG = 261
SONNENSCHEINDAUER = 18
MAX_WIND = 139
WINDRICHTUNG = 73

# Intervalle:
MINUTE = "T"
TAG = "D"
#Test = "6h50T"


def daten_einlesen(daten):
    """Hier werden die Daten eingelesen und zurückgegeben"""

    df = pd.read_csv(daten,sep = "|",header = None,parse_dates = True)
    df.dropna(how = "all",inplace = True)
    df = df.fillna("")
    df = df.replace("******","")
    df[0] = pd.to_datetime(df[0])
    df = df.set_index(0)  # df = zuordnen dann bleibt 1 spalte erhalten
    anfang_index = df.index.tolist()[0]  # ermittelt den ersten Index eintrag
    ende_index = df.index.tolist()[-1]  # ermittelt den letzten Index eintrag
    return df,anfang_index,ende_index


def daten_intervalle(daten,kanalnummer1,kanalnummer2,anfang_index,ende_index,freq):
    index = pd.date_range(anfang_index,ende_index,freq = freq)
    if kanalnummer2 == 0:
        daten_mit_intervallen = pd.DataFrame(daten.iloc[:,kanalnummer1],index = index)
    else:
        daten_mit_intervallen = pd.DataFrame(daten.iloc[:,[kanalnummer1,kanalnummer2]],index = index)
    return daten_mit_intervallen


def max_daten(daten,kanalnummer1,kanalnummer2,anfang_index,ende_index,freq_intervall,freq_min_und_max):
    daten_mit_intervallen = daten_intervalle(daten,kanalnummer1,kanalnummer2,anfang_index,ende_index,freq_intervall)
    daten_max = daten_mit_intervallen.loc[daten_mit_intervallen.groupby(
                pd.Grouper(freq = freq_min_und_max)).idxmax().iloc[:,1]]
    return daten_max


def min_daten(daten,kanalnummer_1,kanalnummer_2,anfang_index,ende_index,freq_intervall,freq_min_und_max):
    daten_mit_intervallen = daten_intervalle(daten,kanalnummer_1,kanalnummer_2,anfang_index,ende_index,freq_intervall)
    daten_min = daten_mit_intervallen.loc[daten_mit_intervallen.groupby(
                                          pd.Grouper(freq = freq_min_und_max)).idxmin().iloc[:,1]]
    return daten_min


def main():
    ausgelsene_daten,anfangs_index,ende_index = daten_einlesen(ORDNER_MIT_DATEN)
    wind_daten = max_daten(ausgelsene_daten,WINDRICHTUNG,MAX_WIND,anfangs_index,ende_index,MINUTE,TAG)
    max_temperatur = max_daten(ausgelsene_daten,MAX_TEMPERATUR,KEIN_KANAL,anfangs_index,ende_index,MINUTE,TAG)
    print(max_temperatur)

    # Intervalle klappen noch nicht
    lufttemperatur_daten = daten_intervalle(ausgelsene_daten,LUFTTEMPERATUR,KEIN_KANAL,
                                            anfangs_index,ende_index,Test)
    relative_luftfeuchtigkeit_daten = daten_intervalle(ausgelsene_daten,RELATIVE_LUFTFEUCHTIGKEIT,KEIN_KANAL,
                                                       anfangs_index,ende_index,Test)




if __name__=="__main__":
    main()




    #Notiz:# index= pd.date_range( '2020-02-01 06:00:00',"2020-02-29 06:00:00" ,freq = '24h' )
Eine Vision ohne Aktion bleibe eine Illusion
Antworten