Daten in Listen synchronisieren

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
winnitouch
User
Beiträge: 21
Registriert: Montag 25. März 2019, 22:33

Hallo zusammen,

ich hab gerade folgendes Problem. Ich hab mehrere Files mit Rohdaten in einem Ordner, zum Beispiel 3 Files. Die Rohdaten sehen wie folgt aus:
Bild

Nun möchte ich die 3 Files einlesen (zum Beispiel in eine Liste?), so dass alle 3 Listen die gleiche Anzahl Elemente haben. Wenn man die 3 Rohdaten-Files anders darstellt, ergeben sich quasi folgende Lücken, welche aufgefüllt werden müssten:
Bild

Und die Lücken sollen nun so aufgeüllt werden, dass bei einem fehlenden Datensatz der vorherige Wert eingetragen wird. Also fehlt z.B. bei File 2 der 25.02.2019, dann soll hierfür der Wert vom 24.02.2019 genommen werden. Sollte bei einem File der aller erste Wert fehlen, soll hier eine 0 eingetragen werden. Der finale Datensatz geht dann vom frühesten Datum aller Files (hier aus File 2 der 24.02.) bis zum spätesten Datum aller Files (hier aus File 1 oder 3 der 29.03.)
Bild


Kann mir jemand helfen?

Gruss
Benutzeravatar
__blackjack__
User
Beiträge: 13100
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@winnitouch: Schau Dir mal das `pandas`-Modul an.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Code: Alles auswählen

import pandas as pd
import numpy as np

# erzeugen der Datums Spalte
index = pd.date_range(start='24.02.2019', periods=34, freq='D')

# erzeugen der 3 Rohdaten Dateien
liste_1 = pd.DataFrame(data={'Datum': index, 'Roh1': np.random.randint(2000, 9000, 34)})
liste_2 = pd.DataFrame(data={'Datum': index, 'Roh2': np.random.randint(2000, 9000, 34)})
liste_3 = pd.DataFrame(data={'Datum': index, 'Roh3': np.random.randint(2000, 9000, 34)})

# löschen der jeweiligen fehlenden Daten
liste_1.drop(index=[0, 32], axis=0, inplace=True)
liste_2.drop(index=[1, 2, 5, 11, 19, 33], axis=0, inplace=True)
liste_3.drop(index=[0, 3, 4, 10, 13, 21, 22], axis=0, inplace=True)

# mergen der Listen OHNE auffüllen der fehlenden Werte
df = pd.merge_ordered(liste_1, liste_2, on='Datum', how='outer')
df = pd.merge_ordered(df, liste_3, on='Datum', how='outer')
print(df)

# mergen der Listen MIT auffüllen der fehlenden Werte
df = pd.merge_ordered(liste_1, liste_2, on='Datum', how='outer', fill_method='ffill')
df = pd.merge_ordered(df, liste_3, on='Datum', how='outer', fill_method='ffill')

print(df)
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
winnitouch
User
Beiträge: 21
Registriert: Montag 25. März 2019, 22:33

wow, vielen Dank für Deine Hilfe, werde ich ausprobieren!
Antworten