große Datensätze separieren

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
zuio
User
Beiträge: 4
Registriert: Montag 8. Januar 2018, 13:38

Montag 8. Januar 2018, 13:58

hallo. Ich hab ein Python- Problem!
Und zwar habe ich große Datensätze von 8 verschiedenen Messgeräten mit minütlichen Messwerten über mehrere Tage. Diese befinden sich alle in einem file. Ich möchte nun die Daten in einzelne Tagesfiles separieren und hab nicht wirklich einen Plan wie ich das anstellen soll. Bisher sieht das ganze so aus:

Code: Alles auswählen

file = 'Gesamtfile.xls'

df = pd.read_excel(file, header = 1, usecols = [1, 2, 3, 4, 5, 6, 7, 8])

df.set_index('Datum Zeit')
Mein Ansatz ist nun Folgender:
Beim Einlesen ist der erste Parameter das Datum und die Uhrzeit. Wenn ich die Reihen des files nach dem Datum indizieren könnte(das war die Abischt mit dem set_index-Befehl), dann wäre es doch sicher möglich mit einer if- Abfrage nach dem Datum (ala Datum = 26.06*) die zugehörigen Reihen zu separieren. Genau bei diesem Schritt bin ich aber leider überfordert, weil ich nicht weiß wie ich das nun anstellen soll.. :(
Kann mir da jemand helfen?

lg
Benutzeravatar
noisefloor
User
Beiträge: 2427
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: Görgeshausen
Kontaktdaten:

Dienstag 9. Januar 2018, 07:30

Hallo,

zeig' doch mal einen kleine Ausschnitt aus den Daten als Beispiel. So 6-10 Zeilen sollten reichen.

Gruß, noisefloor
zuio
User
Beiträge: 4
Registriert: Montag 8. Januar 2018, 13:38

Dienstag 9. Januar 2018, 09:01

Datum Zeit, GMT+00:00 Windgeschwindigkeit, m/s (LGR S/N: 1163666, SEN S/N: 1136462) Böengeschwindigkeit, m/s (LGR S/N: 1163666, SEN S/N: 1136462) Windrichtung, ø (LGR S/N: 1163666, SEN S/N: 1136462) Temp., °C (LGR S/N: 1163666, SEN S/N: 1149370) RH, % (LGR S/N: 1163666, SEN S/N: 1149370) Druck, mbar (LGR S/N: 1163666, SEN S/N: 1149445) Sonnenstrahlung, W/m² (LGR S/N: 1163666, SEN S/N: 2275659)
26.06.2017 10:00:00 0.74 3.15 80.0 27.431 53.600 994.350 1,044.4
26.06.2017 10:01:00 1.67 3.15 28.1 27.333 48.600 994.150 1,060.6
26.06.2017 10:02:00 1.67 2.78 25.3 27.358 48.000 994.150 1,089.4
26.06.2017 10:03:00 1.86 2.60 8.4 27.210 48.400 994.150 345.6
26.06.2017 10:04:00 0.74 1.48 9.8 27.112 48.300 994.150 471.9
26.06.2017 10:05:00 1.11 1.86 23.9 27.112 48.500 994.250 874.4


habs einfach rüberkopiert. sorry für die unordnung. jedenfalls sind das oben die parameter und darunter die dazugehörigen werte. bin mittlerweile schon etwas weitergekommen. ich habs mittlerweile geschafft das Datum als Index für die restlichen Parameter zu setzen und auch die Indizes nach dem Datum zu separieren:

Code: Alles auswählen

#Suche nach dem gewünschten String im Index
pattern = re.compile("26.06.2017*")
for element in df.index:
   
    if pattern.match(element):
        print(element)
allerdings werden auf diese Weise nur die passenden Indizes ausgegeben, nicht aber die zugehörigen values. Wie schaff ichs nun dass ich die zugehörigen values aufrufe?

lg
Benutzeravatar
noisefloor
User
Beiträge: 2427
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: Görgeshausen
Kontaktdaten:

Dienstag 9. Januar 2018, 11:57

Hallo,

so geht. Ausgangsdaten (Dateiname: winddata.csv)

[codebox=text file=Unbenannt.txt]26.06.2017 10:00:00;0.74;3.15;80.0;27.431;53.600;994.350;1,044.4
26.06.2017 10:01:00;1.67;3.15;28.1;27.333;48.600;994.150;1,060.6
26.06.2017 10:02:00;1.67;2.78;25.3;27.358;48.000;994.150;1,089.4
27.06.2017 10:03:00;1.86;2.60;8.4;27.210;48.400;994.150;345.6
27.06.2017 10:04:00;0.74;1.48;9.8;27.112;48.300;994.150;471.9
27.06.2017 10:05:00;1.11;1.86;23.9;27.112;48.500;994.250;874.4[/code]

[codebox=pycon file=Unbenannt.txt]>>> import pandas as pd
>>> df = pd.read_csv('winddata.csv', sep=';', names=['datetime', 'a' ,'b', 'c', 'd', 'e', 'f', 'g'], parse_dates=[0])
>>> df.index = df['datetime']
>>> df['2017-06-26']
datetime a b c d e \
datetime
2017-06-26 10:00:00 2017-06-26 10:00:00 0.74 3.15 80.0 27.431 53.6
2017-06-26 10:01:00 2017-06-26 10:01:00 1.67 3.15 28.1 27.333 48.6
2017-06-26 10:02:00 2017-06-26 10:02:00 1.67 2.78 25.3 27.358 48.0

f g
datetime
2017-06-26 10:00:00 994.35 1,044.4
2017-06-26 10:01:00 994.15 1,060.6
2017-06-26 10:02:00 994.15 1,089.4[/code]

Du hast dann so die `datetime` Spalte doppelt, als Index und als "normale" Spalte. Letztere könntest du b ei Bedarf ggf. löschen.

Gruß, noisefloor
Antworten