def resample_time(trj: TrajaDataFrame, step_time: str, new_fps: bool = None): """Returns a ``TrajaDataFrame`` resampled to consistent `step_time` intervals. Args: trj (:class:`~traja.frame.TrajaDataFrame`): Trajectory step_time (str): step time interval (eg, '1s') new_fps (bool, optional): new fps Results: trj (:class:`~traja.frame.TrajaDataFrame`): Trajectory .. doctest:: >>> from traja import generate >>> from traja.trajectory import resample_time >>> df = generate() >>> resampled = resample_time(df, '2s') >>> resampled.head() time x y 0 00:00:00 14.555071 -26.482614 1 00:00:02 -3.582797 -6.491297 2 00:00:04 -4.299709 26.937443 3 00:00:06 -25.337042 42.131848 4 00:00:08 33.069915 32.780830 """ time_col = _get_time_col(trj) if time_col is "index" and is_datetime64_any_dtype(trj.index): _trj = _resample_time(trj, step_time) elif time_col is "index" and is_timedelta64_dtype(trj.index): _trj = _resample_time(trj, step_time) elif time_col: if isinstance(step_time, str): try: if "." in step_time: raise NotImplementedError("Fractional step time not implemented.") except Exception: raise NotImplementedError( f"Inferring from time format {step_time} not yet implemented." ) _trj = trj.set_index(time_col) _trj.index = pd.to_timedelta(_trj.index, unit="s") _trj = _resample_time(_trj, step_time) _trj.reset_index(inplace=True) else: raise NotImplementedError( f"Time column ({time_col}) not of expected data type." ) return _trj
def resample_time(trj: TrajaDataFrame, step_time: str, new_fps: Optional[bool] = None): """Returns a ``TrajaDataFrame`` resampled to consistent `step_time` intervals. ``step_time`` should be expressed as a number-time unit combination, eg "2S" for 2 seconds and “2100L” for 2100 milliseconds. Args: trj (:class:`~traja.frame.TrajaDataFrame`): Trajectory step_time (str): step time interval / offset string (eg, '2S' (seconds), '50L' (milliseconds), '50N' (nanoseconds)) new_fps (bool, optional): new fps Results: trj (:class:`~traja.frame.TrajaDataFrame`): Trajectory .. doctest:: >>> from traja import generate, resample_time >>> df = generate() >>> resampled = resample_time(df, '50L') # 50 milliseconds >>> resampled.head() x y time 1970-01-01 00:00:00.000 0.000000 0.000000 1970-01-01 00:00:00.050 0.999571 4.293384 1970-01-01 00:00:00.100 -1.298510 5.423373 1970-01-01 00:00:00.150 -6.056916 4.874502 1970-01-01 00:00:00.200 -10.347759 2.108385 """ time_col = _get_time_col(trj) if time_col == "index" and is_datetime64_any_dtype(trj.index): _trj = _resample_time(trj, step_time) elif time_col == "index" and is_timedelta64_dtype(trj.index): trj.index = pd.to_datetime(trj.index) _trj = _resample_time(trj, step_time) _trj.index = pd.to_timedelta(_trj.index) elif time_col: if isinstance(step_time, str): try: if "." in step_time: raise NotImplementedError( """Fractional step time not implemented. For milliseconds/microseconds/nanoseconds use: L milliseonds U microseconds N nanoseconds eg, step_time='2100L'""") except Exception: raise NotImplementedError( f"Inferring from time format {step_time} not yet implemented." ) _trj = trj.set_index(time_col) time_units = _trj.__dict__.get("time_units", "s") _trj.index = pd.to_datetime(_trj.index, unit=time_units) _trj = _resample_time(_trj, step_time) else: raise NotImplementedError( f"Time column ({time_col}) not of expected datasets type.") return _trj