Skip to content

Commit af4e2ce

Browse files
jbrockmendelTomAugspurger
authored andcommitted
REF: share _validate_fill_value (#30752)
* REF: share _validate_fill_value * post-black fixup
1 parent d3f94a4 commit af4e2ce

File tree

4 files changed

+12
-39
lines changed

4 files changed

+12
-39
lines changed

pandas/core/arrays/datetimelike.py

+11-1
Original file line numberDiff line numberDiff line change
@@ -591,7 +591,17 @@ def _validate_fill_value(self, fill_value):
591591
------
592592
ValueError
593593
"""
594-
raise AbstractMethodError(self)
594+
if isna(fill_value):
595+
fill_value = iNaT
596+
elif isinstance(fill_value, self._recognized_scalars):
597+
self._check_compatible_with(fill_value)
598+
fill_value = self._scalar_type(fill_value)
599+
fill_value = self._unbox_scalar(fill_value)
600+
else:
601+
raise ValueError(
602+
f"'fill_value' should be a {self._scalar_type}. Got '{fill_value}'."
603+
)
604+
return fill_value
595605

596606
def take(self, indices, allow_fill=False, fill_value=None):
597607
if allow_fill:

pandas/core/arrays/datetimes.py

-15
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
)
2121
import pandas.compat as compat
2222
from pandas.errors import PerformanceWarning
23-
from pandas.util._decorators import Appender
2423

2524
from pandas.core.dtypes.common import (
2625
_INT64_DTYPE,
@@ -700,20 +699,6 @@ def astype(self, dtype, copy=True):
700699
return self.to_period(freq=dtype.freq)
701700
return dtl.DatetimeLikeArrayMixin.astype(self, dtype, copy)
702701

703-
# ----------------------------------------------------------------
704-
# ExtensionArray Interface
705-
706-
@Appender(dtl.DatetimeLikeArrayMixin._validate_fill_value.__doc__)
707-
def _validate_fill_value(self, fill_value):
708-
if isna(fill_value):
709-
fill_value = iNaT
710-
elif isinstance(fill_value, (datetime, np.datetime64)):
711-
self._assert_tzawareness_compat(fill_value)
712-
fill_value = Timestamp(fill_value).value
713-
else:
714-
raise ValueError(f"'fill_value' should be a Timestamp. Got '{fill_value}'.")
715-
return fill_value
716-
717702
# -----------------------------------------------------------------
718703
# Rendering Methods
719704

pandas/core/arrays/period.py

+1-12
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
)
2222
from pandas._libs.tslibs.timedeltas import Timedelta, delta_to_nanoseconds
2323
import pandas.compat as compat
24-
from pandas.util._decorators import Appender, cache_readonly
24+
from pandas.util._decorators import cache_readonly
2525

2626
from pandas.core.dtypes.common import (
2727
_TD_DTYPE,
@@ -505,17 +505,6 @@ def to_timestamp(self, freq=None, how="start"):
505505
# --------------------------------------------------------------------
506506
# Array-like / EA-Interface Methods
507507

508-
@Appender(dtl.DatetimeLikeArrayMixin._validate_fill_value.__doc__)
509-
def _validate_fill_value(self, fill_value):
510-
if isna(fill_value):
511-
fill_value = iNaT
512-
elif isinstance(fill_value, Period):
513-
self._check_compatible_with(fill_value)
514-
fill_value = fill_value.ordinal
515-
else:
516-
raise ValueError(f"'fill_value' should be a Period. Got '{fill_value}'.")
517-
return fill_value
518-
519508
def _values_for_argsort(self):
520509
return self._data
521510

pandas/core/arrays/timedeltas.py

-11
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
)
1414
import pandas.compat as compat
1515
from pandas.compat.numpy import function as nv
16-
from pandas.util._decorators import Appender
1716

1817
from pandas.core.dtypes.common import (
1918
_NS_DTYPE,
@@ -367,16 +366,6 @@ def _maybe_clear_freq(self):
367366
# ----------------------------------------------------------------
368367
# Array-Like / EA-Interface Methods
369368

370-
@Appender(dtl.DatetimeLikeArrayMixin._validate_fill_value.__doc__)
371-
def _validate_fill_value(self, fill_value):
372-
if isna(fill_value):
373-
fill_value = iNaT
374-
elif isinstance(fill_value, (timedelta, np.timedelta64, Tick)):
375-
fill_value = Timedelta(fill_value).value
376-
else:
377-
raise ValueError(f"'fill_value' should be a Timedelta. Got '{fill_value}'.")
378-
return fill_value
379-
380369
def astype(self, dtype, copy=True):
381370
# We handle
382371
# --> timedelta64[ns]

0 commit comments

Comments
 (0)