Eigentlich zwei Fragen, aber versuchen wir es zu erklären.Python, Pandas: Datenrahmen auf Zeitstempel und Offset verbinden
Ich habe zwei Datenquellen (z. B. Datenrahmen). Einer enthält die GPS-Koordinaten und den Zeitstempel einer gefahrenen Spur. Der andere enthält bestimmte Punkte von Interesse, die durch einen zeitlichen Versatz gegeben sind - aber ohne die GPS-Koordinate. Die Aufgabe besteht darin, die GPS-Koordinaten für die Punkte von Interesse zu finden.
Hier ist, was ich habe. Der Datenrahmen mit der GPS-Koordinaten an 1sec Abstände neu abgetasteten und fehlende Werte werden in einer linearen Weise interpolieren:
df_resampled.head()
Mit diesem Ausgang:
Time, LongitudeDegrees, LatitudeDegrees, DistanceMeters, AltitudeMeters
2017-08-24 13:33:46, 15.457636, 47.047332, 0.0, 348.600006
2017-08-24 13:33:47, 15.457668, 47.047288, 0.0, 348.600006
2017-08-24 13:33:48, 15.457699, 47.047244, 0.0, 348.600006
2017-08-24 13:33:49, 15.457973, 47.047136, 0.0, 348.600006
Bemerkung: Die Typen sind alle Schwimmer während der Der Index ist Numpy.dtype (datetime). Umbau und Resampling wurde von getan:
# convert numeric types first
df = df.apply(pd.to_numeric, errors='ignore')
# convert timestamp to datetime and set the index
df['Time'] = pd.to_datetime(df['Time'])
df.set_index('Time', inplace=True)
# resample to seconds and linear fill of missing values
df_downscaled = df.resample('S').mean()
df_resampled = df_downscaled.interpolate(method='linear')
Der andere Datenrahmen enthält die Punkte von Interesse und keinen Zeitstempel, sondern eine zeitversetzte:
df_poi.head()
gibt diese Ausgabe:
index, time_offset, value
0, 00:25, 60
1, 01:18, 60
2, 01:30, 100
3, 01:55, 100
4, 02:16, 100
Frage & Aufgabe: Aber jetzt bin ich fest. Ich dachte, die Spalte des zweiten Datenrahmens zu einem Zeitraum oder Datetime-Typ Spalte zu konvertieren und diese zum ersten Zeitstempel (start_time) des ersten Datenrahmens hinzuzufügen.
Aber a) Ich habe keine Ahnung, wie man die Zeichenkette des Formats mm: ss (Minuten: Sekunden) zu einem Datum/Uhrzeit-Offset (oder Periode) konvertiert und es zu einem anderen Zeitstempel hinzufügt.
Die START_TIME zu dem alle Offsets hinzugefügt werden müssen, wäre dies sein:
start_time = df_resampled.index[0]
Sobald der Versatz zu einem echten Zeitstempel umgewandelt wird, würde ich den zweiten Datenrahmen mit dem ersten auf dem Zeitstempel Joinspalte .
Ich habe str.split verwendet und die Dauer von Minuten und Sekunden auf Sekunden umgerechnet. Dann habe ich die start_time mit dem Offset hinzugefügt. Ihre Lösung ist jedoch klüger. – Matthias