Die Art der Daten, die wir streamen, stammt aus unserem PI System, das Daten unregelmäßig ausgibt. Dies ist bei Zeitreihendaten nicht ungewöhnlich, daher habe ich versucht, jedem Zeitstempel eine Sekunde hinzuzufügen, um sicherzustellen, dass der Index eindeutig ist. Dies hat jedoch nicht so funktioniert, wie ich gehofft habe, da ich einen Typfehler erhalten habe.So passen Sie Zeitstempel für Streamingdaten richtig an, um eindeutige Indizes zu erstellen
Ich habe versucht, die in (Modifying timestamps in pandas to make index unique) hervorgehobenen Lösungen jedoch ohne Erfolg zu implementieren.
Die Fehlermeldung ich erhalte, ist:
TypeError: ufunc add cannot use operands with types dtype('O') and dtype('<m8')
Die Code-Implementierung unter:
values = Slugging_Sep.index.duplicated(keep=False).astype(float)
values[values==0] = np.NaN
missings = np.isnan(values)
cumsum = np.cumsum(~missings)
diff = np.diff(np.concatenate(([0.], cumsum[missings])))
values[missings] = -diff
# print result
result = Slugging_Sep.index + np.cumsum(values).astype(np.timedelta64)
print(result)
Was ich
- Type Casting versucht haben - ich dachte, dass die Die Berechnung erfolgte aufgrund von zwei unterschiedlichen Typen ther, aber dies hat das Problem nicht gelöst.
Zeit Delta in Pandas verwenden - Dies erzeugt den gleichen Typ Fehler.
pd.to_timedelta(Slugging_Sep.groupby('Time').cumcount(), unit='ms')) Slugging_Sep['Time'] = (str(Slugging_Sep['Time'] + pd.to_timedelta(Slugging_Sep.groupby('Time').cumcount(), unit='ms')))
So habe ich zwei Fragen daraus:
- Könnte jemand einen Rat für mich sorgen darüber, wie diese für zukünftige Zeitreihen Probleme zu lösen?
- Was ist eigentlich
dtype ('<m8')
Danke.
Können Sie Beispieleingabe und beabsichtigte Ausgabe für einige Testfälle bereitstellen? Vermeiden Sie es auch, Screenshots von Daten zu veröffentlichen - geben Sie stattdessen die eigentlichen Daten inline ein. Es ist viel einfacher, auf diese Weise zu helfen. –
Meine beste Vermutung ist, dass Slugging_Sep.index keine richtige Datetime ist. Haben Sie versucht, es mit pd.to_datetime() zu konvertieren, bevor Sie das Timedelta hinzufügen? –