From 9d12ae17741c92186583a27a42f43d971c1de4c9 Mon Sep 17 00:00:00 2001 From: Dongdong Tian Date: Mon, 22 Apr 2024 09:36:04 +0800 Subject: [PATCH] Convert dummpy times to timedelta --- pygmt/src/x2sys_cross.py | 12 +++++++----- pygmt/tests/test_x2sys_cross.py | 8 ++++---- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/pygmt/src/x2sys_cross.py b/pygmt/src/x2sys_cross.py index 6814a5dda55..2f83a7dd08f 100644 --- a/pygmt/src/x2sys_cross.py +++ b/pygmt/src/x2sys_cross.py @@ -229,12 +229,14 @@ def x2sys_cross( vfname=vouttbl, output_type=output_type, header=2 ) - # Convert 3rd and 4th columns to datetimes. + # Convert 3rd and 4th columns to datetime or timedelta. # These two columns have names "t_1"/"t_2" or "i_1"/"i_2". - # "t_1"/"t_2" means they are datetimes and should be converted. - # "i_1"/"i_2" means they are dummy times (i.e., floating-point values). - if output_type == "pandas" and result.columns[2] == "t_1": + # "t_1"/"t_2" means they are absolute datetimes. + # "i_1"/"i_2" means they are dummy times relative to unix epoch. + if output_type == "pandas": + t_or_i = result.columns[2][0] + to_func = {"t": pd.to_datetime, "i": pd.to_timedelta}[t_or_i] result[result.columns[2:4]] = result[result.columns[2:4]].apply( - pd.to_datetime, unit="s" + to_func, unit="s" ) return result diff --git a/pygmt/tests/test_x2sys_cross.py b/pygmt/tests/test_x2sys_cross.py index 3c2a8509edf..e3852f3a158 100644 --- a/pygmt/tests/test_x2sys_cross.py +++ b/pygmt/tests/test_x2sys_cross.py @@ -101,8 +101,8 @@ def test_x2sys_cross_input_dataframe_output_dataframe(tracks): columns = list(output.columns) assert columns[:6] == ["x", "y", "i_1", "i_2", "dist_1", "dist_2"] assert columns[6:] == ["head_1", "head_2", "vel_1", "vel_2", "z_X", "z_M"] - assert output.dtypes["i_1"].type == np.float64 - assert output.dtypes["i_2"].type == np.float64 + assert output.dtypes["i_1"].type == np.timedelta64 + assert output.dtypes["i_2"].type == np.timedelta64 @pytest.mark.usefixtures("mock_x2sys_home") @@ -162,8 +162,8 @@ def test_x2sys_cross_input_dataframe_with_nan(tracks): columns = list(output.columns) assert columns[:6] == ["x", "y", "i_1", "i_2", "dist_1", "dist_2"] assert columns[6:] == ["head_1", "head_2", "vel_1", "vel_2", "z_X", "z_M"] - assert output.dtypes["i_1"].type == np.float64 - assert output.dtypes["i_2"].type == np.float64 + assert output.dtypes["i_1"].type == np.timedelta64 + assert output.dtypes["i_2"].type == np.timedelta64 @pytest.mark.usefixtures("mock_x2sys_home")