@@ -175,3 +175,29 @@ def test_explode_pyarrow_non_list_type(ignore_index):
175
175
result = ser .explode (ignore_index = ignore_index )
176
176
expected = pd .Series ([1 , 2 , 3 ], dtype = "int64[pyarrow]" , index = [0 , 1 , 2 ])
177
177
tm .assert_series_equal (result , expected )
178
+
179
+ def test_explode_preserves_datetime_unit ():
180
+ # Create datetime64[ms] array manually
181
+ dt64_ms = np .array (["2020-01-01T00:00:00.000" , "2020-01-01T01:00:00.000" , "2020-01-01T02:00:00.000" ], dtype = "datetime64[ms]" )
182
+ s = pd .Series ([dt64_ms ])
183
+
184
+ # Explode the Series
185
+ result = s .explode ()
186
+
187
+ # Ensure the dtype (including unit) is preserved
188
+ assert result .dtype == dt64_ms .dtype , f"Expected dtype { dt64_ms .dtype } , got { result .dtype } "
189
+
190
+ def test_single_column_explode_preserves_datetime_unit ():
191
+ # Use freq in ms since unit='ms'
192
+ rng = pd .date_range ("2020-01-01T00:00:00Z" , periods = 3 , freq = "3600000ms" , unit = "ms" )
193
+ s = pd .Series ([rng ])
194
+ result = s .explode ()
195
+ assert result .dtype == rng .dtype
196
+
197
+ def test_multi_column_explode_preserves_datetime_unit ():
198
+ rng1 = pd .date_range ("2020-01-01" , periods = 2 , freq = "3600000ms" , unit = "ms" )
199
+ rng2 = pd .date_range ("2020-01-01" , periods = 2 , freq = "3600000ms" , unit = "ms" )
200
+ df = pd .DataFrame ({"A" : [rng1 ], "B" : [rng2 ]})
201
+ result = df .explode (["A" , "B" ])
202
+ assert result ["A" ].dtype == rng1 .dtype
203
+ assert result ["B" ].dtype == rng2 .dtype
0 commit comments