Skip to content

Commit 5b9f980

Browse files
authored
ENH: Add to_pydatetime for ArrowExtensionArray (#51869)
1 parent acf3395 commit 5b9f980

File tree

3 files changed

+19
-0
lines changed

3 files changed

+19
-0
lines changed

pandas/core/arrays/arrow/array.py

+3
Original file line numberDiff line numberDiff line change
@@ -2090,6 +2090,9 @@ def _dt_round(
20902090
):
20912091
return self._round_temporally("round", freq, ambiguous, nonexistent)
20922092

2093+
def _dt_to_pydatetime(self):
2094+
return np.array(self._data.to_pylist(), dtype=object)
2095+
20932096
def _dt_tz_localize(
20942097
self,
20952098
tz,

pandas/core/indexes/accessors.py

+3
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,9 @@ def _delegate_method(self, name: str, *args, **kwargs):
209209

210210
return result
211211

212+
def to_pydatetime(self):
213+
return cast(ArrowExtensionArray, self._parent.array)._dt_to_pydatetime()
214+
212215
def isocalendar(self):
213216
from pandas import DataFrame
214217

pandas/tests/extension/test_arrow.py

+13
Original file line numberDiff line numberDiff line change
@@ -2248,6 +2248,19 @@ def test_dt_ceil_year_floor(freq, method):
22482248
tm.assert_series_equal(result, expected)
22492249

22502250

2251+
def test_dt_to_pydatetime():
2252+
# GH 51859
2253+
data = [datetime(2022, 1, 1), datetime(2023, 1, 1)]
2254+
ser = pd.Series(data, dtype=ArrowDtype(pa.timestamp("ns")))
2255+
2256+
result = ser.dt.to_pydatetime()
2257+
expected = np.array(data, dtype=object)
2258+
tm.assert_numpy_array_equal(result, expected)
2259+
2260+
expected = ser.astype("datetime64[ns]").dt.to_pydatetime()
2261+
tm.assert_numpy_array_equal(result, expected)
2262+
2263+
22512264
def test_dt_tz_localize_unsupported_tz_options():
22522265
ser = pd.Series(
22532266
[datetime(year=2023, month=1, day=2, hour=3), None],

0 commit comments

Comments
 (0)